回答:
スケジュールを使用できます
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 )
import java.util.Timer
import kotlin.concurrent.schedule
Timer("SettingUp", false).schedule(500) {
doSomething()
}
kotlin.concurrent.schedule
Kotlinは単に署名の不一致について不平を言っただけだったので、これはインポート後もコンパイルされないと当初思っていましたが、LongではなくIntを渡そうとしていることに気付きました。それを修正してまとめました。
使用するオプションもあります Handler -> postDelayed
Handler().postDelayed({
//doSomethingHere()
}, 1000)
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)
launch
コルーチンを作成しdelay
てから、関数を呼び出すことができます。
/*GlobalScope.*/launch {
delay(1000)
yourFn()
}
クラスまたはオブジェクトの外側にいる場合はGlobalScope
、コルーチンをそこで実行させるためCoroutineScope
に追加します。それ以外の場合は、周囲のクラスにを実装して、必要に応じてそのスコープに関連付けられたすべてのコルーチンをキャンセルできるようにすることをお勧めします。
val timer = Timer()
timer.schedule(timerTask { nextScreen() }, 3000)
Timer.schedule()
a TimerTask
を期待します。kotlin.concurrent.timerTask()
指定されたラムダをTimerTask
インスタンスでラップします。ここを参照してください:kotlinlang.org/api/latest/jvm/stdlib/kotlin.concurrent/...
Timer
オブジェクトを2回以上使用しない場合は、例のように1行に圧縮できますTimer().schedule(timerTask { ... }, 3000)
。Kotlinに適したオプションも利用できます。jonguerの回答を参照してください。
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.
})
Run.after(1000) { toRun() }
。私は正しいですか
SingleThreadは、使用後に強制終了する必要がないため、使用することをお勧めします。また、「stop()」メソッドはKotlin言語では非推奨になりました。
private fun mDoThisJob(){
Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate({
//TODO: You can write your periodical job here..!
}, 1, 1, TimeUnit.SECONDS)
}
また、定期的な作業にもご利用いただけます。とても便利です。あなたが毎秒仕事をしたいなら、あなたはそのパラメータのために設定することができます:
Executors.newSingleThreadScheduledExecutor()。scheduleAtFixedRate(Runnable command、long initialDelay、long period、TimeUnit unit);
TimeUnitの値は、NANOSECONDS、MICROSECONDS、MILLISECONDS、SECONDS、MINUTES、HOURS、DAYSです。
@canerkaseler
Timer("SettingUp", false).schedule(500) { doSomething() }