私が試したKotlinでコードを遅延させようとしています
Thread.sleep(1000)
しかし、UIがフリーズします。
なぜこれが起こっているのか、そしてUIをフリーズせずに遅延させる方法を誰かが知っていますか?
UIをフリーズしたくない場合は、MainThreadからコードを実行する必要があります。
それを行う方法はたくさんあります。いくつかの例:
Thread {
Thread.sleep(1000)
// Your code
}.start()
必要です https://github.com/ReactiveX/RxJava
Flowable.timer(1000, TimeUnit.MILLISECONDS)
.subscribeOn(AndroidSchedulers.mainThread())
.subscribe {
// Your code
}
GlobalScope.launch { // launch new coroutine in background and continue
delay(1000L) // non-blocking delay for 1 second (default time unit is ms)
println("World!") // print after delay
}
リファレンス: https://kotlinlang.org/docs/reference/coroutines-overview.html
Thread.sleep(1000);
現在実行中のスレッドを、指定されたミリ秒数の間スリープ(一時的に実行を停止)します[...]
参照 https://docs.Oracle.com/javase/7/docs/api/Java/lang/Thread.html#sleep(long)
これをUIスレッドで呼び出すと、コードが実行されるデフォルトのスレッドであり、停止して待ってください
純粋なKotlinでは コルーチン を使用する必要があります。
import kotlinx.coroutines.* fun main() { GlobalScope.launch { // launch new coroutine in background and continue delay(1000L) // non-blocking delay for 1 second (default time unit is ms) println("World!") // print after delay } println("Hello,") // main thread continues while coroutine is delayed Thread.sleep(2000L) // block main thread for 2 seconds to keep JVM alive }
Androidアプリをプログラミングしている場合、 Handler とAndroidxを使用して、特にNice構文を使用できます。
Handler().postDelayed( 1000 ) { doSomething() }