TimerTask ne sont pas idéales à utiliser dans un environnement Android parce qu'ils ne sont pas sensible au contexte. Si votre contexte disparaît, le TimerTask attendra patiemment en arrière-plan, pour finalement déclencher et potentiellement bloquer votre application car son activité était terminée. Ou bien, il peut conserver des références à votre activité après sa fermeture, ce qui l'empêche d'être collecté et de potentiellement rendre votre application à court de mémoire.
À la place, utilisez postDelayed(), qui annulera automatiquement la tâche lorsque l'activité est arrêtée.
final int delay = 5000;
final int period = 1000;
final Runnable r = new Runnable() {
public void run() {
Toast.makeText(getApplicationContext(),"RUN!",Toast.LENGTH_SHORT).show();
postDelayed(this, period);
}
};
postDelayed(r, delay);
Par ailleurs, si vous avez besoin d'annuler votre tâche manuellement, vous pouvez utiliser removeCallbacks(r)
où r est le runnable vous tition.
Pour ceux qui veulent planifier le service/début d'activité ou de diffusion, un coup d'oeil à [AlarmManager] (http://developer.android.com/reference/android/app/AlarmManager.html) –