En tant que titre, existe-t-il un moyen d'appeler une fonction après un délai (1 seconde par exemple) dans Kotlin
?
154
Vous pouvez utiliser Schedule
inline fun Timer.schedule(
delay: Long,
crossinline action: TimerTask.() -> Unit
): TimerTask (source)
exemple (merci @Nguyen Minh Binh - trouvé ici: 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()
}
Timer("SettingUp", false).schedule(500) { doSomething() }
kotlin.concurrent.schedule
, car Kotlin se plaignait simplement d'une incompatibilité de signature, mais j'ai ensuite réalisé que j'essayais de passer un Int au lieu d'un Long. Il a été compilé après avoir corrigé cela.Il existe également une option à utiliser
Handler -> postDelayed
la source
Plusieurs façons
1. Utilisation de la
Handler
classe2. Utilisation de la
Timer
classePlus court
Le plus court
3. Utilisation de la
Executors
classela source
Vous devez importer les deux bibliothèques suivantes:
et après cela, utilisez-le de cette manière:
la source
Vous pouvez
launch
une coroutine,delay
puis appeler la fonction:Si vous êtes en dehors d'une classe ou d'un objet prefend
GlobalScope
pour laisser la coroutine s'exécuter là-bas, sinon il est recommandé d'implémenter leCoroutineScope
dans la classe environnante, ce qui permet d'annuler toutes les coroutines associées à cette portée si nécessaire.la source
la source
Timer.schedule()
attend unTimerTask
comme premier argument.kotlin.concurrent.timerTask()
enveloppe le lambda donné dans uneTimerTask
instance. Voir ici: kotlinlang.org/api/latest/jvm/stdlib/kotlin.concurrent / ...Timer
objet ne sera pas utilisé plus d'une fois, par exempleTimer().schedule(timerTask { ... }, 3000)
. Une option plus conviviale pour Kotlin est également disponible; voir la réponse de Jonguer.Un exemple simple pour montrer un toast après 3 secondes :
la source
Si vous recherchez un usage générique, voici ma suggestion:
Créez une classe nommée comme
Run
:Et utilisez comme ceci:
la source
Run.after(1000) { toRun() }
. Ai-je raisonJ'ai recommandé d'utiliser SingleThread car vous n'avez pas à le tuer après utilisation. De plus, la méthode " stop ()" est obsolète en langage Kotlin.
De plus, vous pouvez l'utiliser pour un travail périodique. C'est très utile. Si vous souhaitez faire un travail pour chaque seconde, vous pouvez en définir les paramètres:
Les valeurs de TimeUnit sont: NANOSECONDS, MICROSECONDS, MILLISECONDS, SECONDS, MINUTES, HOURS, DAYS.
@canerkaseler
la source