web-dev-qa-db-fra.com

Kotlin - Fonction d'attente

Y a-t-il une fonction d'attente dans Kotlin? (Je ne parle pas d'un calendrier, mais interrompe l'exécution). J'ai lu que vous pouvez utiliser Thread.sleep(). Cependant, cela ne fonctionne pas pour moi, car la fonction est introuvable.

19
OhMad

La veille du thread prend toujours un temps d'attente: https://docs.Oracle.com/javase/7/docs/api/Java/lang/Thread.html#sleep(long)

public static void sleep(long millis)
                  throws InterruptedException

par exemple.

Thread.sleep(1_000)  // wait for 1 second

Si vous voulez attendre qu'un autre Thread vous réveille, peut-être que `Object # wait () 'serait mieux

https://docs.Oracle.com/javase/7/docs/api/Java/lang/Object.html#wait ()

public final void wait()
                throws InterruptedException

Ensuite, un autre thread doit appeler yourObject#notifyAll()

par exemple . Thread1 et Thread2 partagent un Object o = new Object()

Thread1: o.wait()      // sleeps until interrupted
Thread2: o.notifyAll() // wake up ALL waiting Threads of object o
17
guenhter

S'il vous plaît essayez ceci, cela fonctionnera pour Android:

Handler().postDelayed(
    {
        // This method will be executed once the timer is over
    },
    1000 // value in milliseconds
)
10
Aditay Kaushal

Vous pouvez utiliser des éléments du JDK standard.

Une réponse précédente donne Thread.sleep(millis: Long). Personnellement, je préfère la classe TimeUnit (depuis Java 1.5) qui fournit une syntaxe plus complète.

TimeUnit.SECONDS.sleep(1L)
TimeUnit.MILLISECONDS.sleep(1000L)
TimeUnit.MICROSECONDS.sleep(1000000L)

Ils utilisent Thread.sleepen-dessous de la scène et peuvent également générer une exception InterruptedException.

6
mcoolive

Vous pouvez y parvenir facilement avec les coroutines Kotlin

class SplashActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_splash)

        CoroutineScope(Dispatchers.IO).launch {
            delay(TimeUnit.SECONDS.toMillis(3))
            withContext(Dispatchers.Main) {
                Log.i("TAG", "this will be called after 3 seconds")
                finish()
            }
        }
        Log.i("TAG", "this will be called immediately")
    }
}

build.gradle (app)

dependencies {
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.0.1'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-Android:1.0.1'
}
0
murgupluoglu