タイトルとして、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()
}
Handler -> postDelayed
を使用するためのオプションもあります
Handler().postDelayed({
//doSomethingHere()
}, 1000)
次の2つのライブラリをインポートする必要があります。
import Java.util.*
import kotlin.concurrent.schedule
そしてその後、このようにそれを使う:
Timer().schedule(10000){
//do something
}
Handler
クラスを使うHandler().postDelayed({
TODO("Do something")
}, 2000)
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")
}
Executors
クラスを使うExecutors.newSingleThreadScheduledExecutor().schedule({
TODO("Do something")
}, 2, TimeUnit.SECONDS)
val timer = Timer()
timer.schedule(timerTask { nextScreen() }, 3000)
launch
name__をコルーチン、delay
name__にしてから関数を呼び出すことができます。
/*GlobalScope.*/launch {
delay(1000)
yourFn()
}
クラスまたはオブジェクトの外部にいる場合は、コルーチンを実行させるためにGlobalScope
name__を先頭に追加します。それ以外の場合は、関連するすべてのコルーチンを取り消すことができる周囲のクラスに CoroutineScope
NAME _ を実装することをお勧めします。必要に応じてその範囲に.
3秒後に乾杯を表示する簡単な例:
fun onBtnClick() {
val handler = Handler()
handler.postDelayed({ showToast() }, 3000)
}
fun showToast(){
Toast.makeText(context, "Its toast!", Toast.LENGTH_SHORT).show()
}
あなたが一般的な用法を探しているなら、ここに私の提案があります:
Run
という名前のクラスを作成します。
class Run {
companion object {
fun after(delay: Long, process: () -> Unit) {
Handler().postDelayed({
process()
}, delay)
}
}
}
そしてこのように使います:
Run.after(1000, {
// print something useful etc.
})