web-dev-qa-db-ja.com

Kotlinで遅延後に関数を呼び出す方法

タイトルとして、Kotlinで遅延(例えば1秒)後に関数を呼び出す方法はありますか?

77

あなたは スケジュール を使うことができます

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()
}
52

Handler -> postDelayedを使用するためのオプションもあります

 Handler().postDelayed({
                    //doSomethingHere()
                }, 1000)
98
Bogdan Ustyak

次の2つのライブラリをインポートする必要があります。

import Java.util.*
import kotlin.concurrent.schedule

そしてその後、このようにそれを使う:

Timer().schedule(10000){
    //do something
}
27
jonguer

多くの方法

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)
20
Khemraj
val timer = Timer()
timer.schedule(timerTask { nextScreen() }, 3000)
13
varghesekutty

launchname__をコルーチン、delayname__にしてから関数を呼び出すことができます。

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

クラスまたはオブジェクトの外部にいる場合は、コルーチンを実行させるためにGlobalScopename__を先頭に追加します。それ以外の場合は、関連するすべてのコルーチンを取り消すことができる周囲のクラスに CoroutineScopeNAME _ を実装することをお勧めします。必要に応じてその範囲に.

8
Jonas Wilms

3秒後に乾杯を表示する簡単な例

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

fun showToast(){
    Toast.makeText(context, "Its toast!", Toast.LENGTH_SHORT).show()
}
7
Zeero0

あなたが一般的な用法を探しているなら、ここに私の提案があります:

Runという名前のクラスを作成します。

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

そしてこのように使います:

Run.after(1000, {
    // print something useful etc.
})
5
Ogulcan Orhan