radiobutton - radiogroup example android




Timertask ou Handler (2)

Il y a quelques inconvénients d'utiliser Timer

Il crée un seul thread pour exécuter les tâches et si une tâche prend trop de temps à s'exécuter, d'autres tâches en souffrent. Il ne gère pas les exceptions lancées par les tâches et le thread s'arrête juste, ce qui affecte les autres tâches planifiées et elles ne sont jamais exécutées

Copié de:

TimerTask vs Thread.sleep vs gestionnaire postDelayed - la plus précise pour appeler la fonction toutes les N millisecondes?

Disons que je veux effectuer une action toutes les 10 secondes et qu'il n'est pas nécessaire de mettre à jour la vue.

La question est: est-ce mieux (je veux dire plus efficace et efficient) d'utiliser la minuterie avec timertask 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);

Aussi, je vous serais reconnaissant si vous pouviez expliquer quand utiliser quelle approche et pourquoi l'un d'eux est plus efficace qu'un autre (si c'est le cas).


Handler est meilleur que TimerTask .

Java TimerTask et Android Handler 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'utiliser Handler sur TimerTask dans Android (voir here , here , here , here , ici et here ).

Certains des problèmes signalés avec TimerTask comprennent:

  • Impossible de mettre à jour le thread d'interface utilisateur
  • Fuites de mémoire
  • Non fiable (ne fonctionne pas toujours)
  • Les tâches longues peuvent interférer avec le prochain événement planifié

Exemple

La meilleure source pour toutes sortes d'exemples Android que j'ai vu est à here . Voici un exemple de Handler partir de là pour une tâche répétée.

// Create the Handler object (on the main thread by default)
Handler handler = new Handler();
// Define the code block to be executed
private Runnable runnableCode = new Runnable() {
    @Override
    public void run() {
      // Do something here on the main thread
      Log.d("Handlers", "Called on main thread");
      // Repeat this the same runnable code block again another 2 seconds
      handler.postDelayed(runnableCode, 2000);
    }
};
// Start the initial runnable task by posting through the handler
handler.post(runnableCode);

en relation





timertask