Disons que je veux effectuer une action toutes les 10 secondes et qu'il n'est pas nécessairement nécessaire de mettre à jour la vue.
La question est: vaut-il mieux (je veux dire plus efficace et plus efficace) d'utiliser une minuterie avec une tâche de temps comme ici:
final Handler handler = new Handler();
TimerTask timertask = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
public void run() {
<some task>
}
});
}
};
timer = new Timer();
timer.schedule(timertask, 0, 15000);
}
ou juste un gestionnaire avec postdelayed
final Handler handler = new Handler();
final Runnable r = new Runnable()
{
public void run()
{
<some task>
}
};
handler.postDelayed(r, 15000);
Je vous serais également reconnaissant de bien vouloir expliquer quand utiliser quelle approche et pourquoi l'une d'elles est plus efficace qu'une autre (si elle l'est réellement).
Réponses:
Handler
est mieux queTimerTask
.Java
TimerTask
et AndroidHandler
vous permettent tous deux de planifier des tâches différées et répétées sur les threads d'arrière-plan. Cependant, la littérature recommande massivement d'utiliserHandler
overTimerTask
dans Android (voir ici , ici , ici , ici , ici et ici ).Certains des problèmes signalés avec TimerTask incluent:
Exemple
La meilleure source pour toutes sortes d'exemples Android que j'ai vus est sur Codepath . Voici un
Handler
exemple à partir de là pour une tâche répétitive.en relation
la source
mHandler.removeCallbacks(runnableCode)
au moment opportun (par exempleonStop()
pour une activité).Copié depuis:
TimerTask vs Thread.sleep vs Handler postDelayed - la fonction la plus précise pour appeler toutes les N millisecondes?
la source
Version Kotlin de la réponse acceptée:
la source