Je suis débutant en kotlin. J'essaie de créer une tâche qui se répétera toutes les 2 secondes. J'ai donc créé quelque chose comme ça.
val handler = Handler()
handler.postDelayed(Runnable {
// TODO - Here is my logic
// Repeat again after 2 seconds
handler.postDelayed(this, 2000)
}, 2000)
Mais dans postDelayed(this) cela donne une erreur - required Runnable!, found MainActivity
. J'ai même essayé this@Runnable
mais ça n'a pas fonctionné.
Mais quand j'écris la même fonction comme ça, ça marche
val handler = Handler()
handler.postDelayed(object : Runnable {
override fun run() {
// TODO - Here is my logic
// Repeat again after 2 seconds
handler.postDelayed(this, 2000)
}
}, 2000)
Alors pourquoi le this
mot-clé ne fonctionne pas dans la première fonction, mais dans la deuxième fonction ça marche bien ?
Vous avez plusieurs options pour vous y prendre :
faire en sorte que l'exécutable et le gestionnaire soient dans la même portée
//class scope
val handler = Handler()
val runnable = Runnable {
handler.removeCallbacksAndMessages(null)
//make sure you cancel the
previous task in case you scheduled one that has not run yet
//do your thing
handler.postDelayed(runnable,time)
}
puis dans une fonction
handler.postDelayed(runnable,time)
Vous pouvez exécuter un timertask
, ce qui serait mieux dans ce cas
val task = TimerTask {
override fun run() {
//do your thing
}
}
val timer = Timer()
timer.scheduleAtFixedRate(task,0L, timeBetweenTasks)
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots