TimerTasks no son ideales para su uso en un entorno androide porque no son sensibles al contexto. Si su contexto desaparece, TimerTask seguirá esperando pacientemente en segundo plano, lo que eventualmente disparará y potencialmente bloqueará su aplicación porque su actividad ya había finalizado. O bien, puede mantener referencias a su actividad después de que se ha cerrado, evitando que sea basura y potencialmente haciendo que su aplicación se quede sin memoria.
En su lugar, use postDelayed(), que cancelará automáticamente la tarea cuando se cierre la actividad.
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);
Por cierto, si alguna vez necesita cancelar su tarea de forma manual, puede utilizar removeCallbacks(r)
donde r es el ejecutable informados previamente.
Para aquellos que quieran programar el inicio/la transmisión del servicio/actividad, echen un vistazo a [AlarmManager] (http://developer.android.com/reference/android/app/AlarmManager.html) –