J'essaie de retarder le code dans Kotlin J'ai essayé
Thread.sleep(1000)
Mais cela gèle l'interface utilisateur.
Est-ce que quelqu'un sait pourquoi cela se produit et comment retarder sans geler l'interface utilisateur?
Si vous ne voulez pas geler l'interface utilisateur, vous devez exécuter votre code hors du MainThread .
Il existe de nombreuses façons de procéder. Quelques exemples:
Thread {
Thread.sleep(1000)
// Your code
}.start()
Vous avez besoin de 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
}
référence: https://kotlinlang.org/docs/reference/coroutines-overview.html
Thread.sleep(1000);
Fait dormir le thread en cours d'exécution (arrête temporairement l'exécution) pendant le nombre de millisecondes spécifié, [...]
voir https: //docs.Oracle.com/javase/7/docs/api/Java/lang/Thread.html#sleep (long)
Si vous appelez cela sur le thread d'interface utilisateur , qui est le thread par défaut sur lequel votre code s'exécute, , il s'arrêtera et attendez.
En Kotlin pur, vous devez utiliser un coroutine :
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 }
Si vous programmez une Android vous pouvez utiliser un Handler et Androidx pour une syntaxe particulièrement agréable:
Handler().postDelayed( 1000 ) { doSomething() }