Как вызвать функцию после задержки в Котлин?

Как название, есть ли способ, чтобы вызвать функцию после задержки (1 секунда), например, в Котлин?

Существует также возможность использовать обработчик -> postDelayed`

 Handler().postDelayed({
                    //doSomethingHere()
                }, 1000)
Комментарии (5)
Решение

Вы можете использовать Расписание

inline fun Timer.schedule(
    delay: Long, 
    crossinline action: TimerTask.() -> Unit
): TimerTask (source)

Пример (Спасибо @Нгуен Минь Бинь - нашли его здесь: http://jamie.mccrindle.org/2013/02/exploring-kotlin-standard-library-part-3.html)

import java.util.Timer
import kotlin.concurrent.schedule

Timer("SettingUp", false).schedule(500) { 
   doSomething()
}
Комментарии (13)

Многом

1. С помощью обработчика класса

Handler().postDelayed({
    TODO("Do something")
    }, 2000)

2. С помощью "таймер" класса

Timer().schedule(object : TimerTask() {
    override fun run() {
        TODO("Do something")
    }
}, 2000)

Короче

Timer().schedule(timerTask {
    TODO("Do something")
}, 2000)

Короткие

Timer().schedule(2000) {
    TODO("Do something")
}

3. Класса, используя исполнителей

Executors.newSingleThreadScheduledExecutor().schedule({
    TODO("Do something")
}, 2, TimeUnit.SECONDS)
Комментарии (1)

Вы должны импортировать следующие две библиотеки:

import java.util.*
import kotlin.concurrent.schedule

и после этого использовать его таким образом:

Timer().schedule(10000){
    //do something
}
Комментарии (0)

Можно "запустить" сопрограмма, "задержки" его, а затем вызвать функцию:

 /*GlobalScope.*/launch {
   delay(1000)
   yourFn()
 }

Если вы находитесь за пределами класса или объекта предварять GlobalScope пусть сопрограмма бежать туда, в противном случае рекомендуется выполнить CoroutineScope в окружающем классе, которая позволяет отменить все сопрограммы, связанные с этой области, если это необходимо.

Комментарии (3)
val timer = Timer()
timer.schedule(timerTask { nextScreen() }, 3000)
Комментарии (3)

Простой пример, чтобы показать тост после 3 секунды :

fun onBtnClick() {
    val handler = Handler()
    handler.postDelayed({ showToast() }, 3000)
}

fun showToast(){
    Toast.makeText(context, "Its toast!", Toast.LENGTH_SHORT).show()
}
Комментарии (1)

Если вы ищете универсального использования, вот мое предложение:

Создайте класс с именем, как запустить:

class Run {
    companion object {
        fun after(delay: Long, process: () -> Unit) {
            Handler().postDelayed({
                process()
            }, delay)
        }
    }
}

И использовать такой:

Run.after(1000, {
    // print something useful etc.
})
Комментарии (2)