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

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

Ответ 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.
})