Как заголовок, есть ли способ вызвать функцию после задержки (например, 1 секунду) в Kotlin
?
Как вызвать функцию после задержки в Котлине?
Ответ 1
Вы можете использовать Расписание
inline fun Timer.schedule(
delay: Long,
crossinline action: TimerTask.() -> Unit
): TimerTask (source)
пример (спасибо @Nguyen Minh Binh - нашел его здесь: http://jamie.mccrindle.org/2013/02/exploring-kotlin-standard-library-part-3.html)
Timer("SettingUp", false).schedule(500) {
doSomething()
}
Ответ 2
Существует также возможность использовать Handler -> postDelayed
Handler().postDelayed({
//doSomethingHere()
}, 1000)
Ответ 3
Вам нужно импортировать следующие две библиотеки:
import java.util.*
import kotlin.concurrent.schedule
и после этого используйте его следующим образом:
Timer().schedule(10000){
//do something
}
Ответ 4
Много способов
1. Использование класса Handler
Handler().postDelayed({
TODO("Do something")
}, 2000)
2. Использование класса Timer
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
Executors.newSingleThreadScheduledExecutor().schedule({
TODO("Do something")
}, 2, TimeUnit.SECONDS)
Ответ 5
val timer = Timer()
timer.schedule(timerTask { nextScreen() }, 3000)
Ответ 6
Вы можете launch
сопрограмму, delay
ее и затем вызвать функцию:
/*GlobalScope.*/launch {
delay(1000)
yourFn()
}
Если вы находитесь за пределами класса или объекта, добавьте GlobalScope
для запуска сопрограммы, в противном случае рекомендуется реализовать CoroutineScope
в окружающем классе, который позволяет при необходимости отменить все сопрограммы, связанные с этой областью.
Ответ 7
Простой пример, чтобы показать тост после 3 секунд:
fun onBtnClick() {
val handler = Handler()
handler.postDelayed({ showToast() }, 3000)
}
fun showToast(){
Toast.makeText(context, "Its toast!", Toast.LENGTH_SHORT).show()
}
Ответ 8
Если вы ищете универсальное использование, вот мое предложение:
Создайте класс с именем Run
:
class Run {
companion object {
fun after(delay: Long, process: () -> Unit) {
Handler().postDelayed({
process()
}, delay)
}
}
}
И используйте так:
Run.after(1000, {
// print something useful etc.
})
Ответ 9
А также вы можете увидеть этот блог.
Ниже вы можете настроить обработчик проще. пытаться!
https://medium.com/@ogulcan/kotlin-how-to-call-function-after-delay-65e9d02cc52e