Digamos que quiero realizar alguna acción cada 10 segundos y no es necesario que actualice la vista.
La pregunta es: ¿es mejor (quiero decir más eficiente y efectivo) usar el temporizador con timertask como aquí?
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);
}
o simplemente un controlador con posretrasado
final Handler handler = new Handler();
final Runnable r = new Runnable()
{
public void run()
{
<some task>
}
};
handler.postDelayed(r, 15000);
También le agradecería que me explicara cuándo usar qué enfoque y por qué uno de ellos es más eficiente que otro (si es que realmente lo es).
Respuestas:
Handler
es mejor queTimerTask
.Tanto Java
TimerTask
como Android leHandler
permiten programar tareas retrasadas y repetidas en subprocesos en segundo plano. Sin embargo, la literatura recomienda abrumadoramente usarHandler
overTimerTask
en Android (ver aquí , aquí , aquí , aquí , aquí y aquí ).Algunos de los problemas reportados con TimerTask incluyen:
Ejemplo
La mejor fuente para todo tipo de ejemplos de Android que he visto está en Codepath . A continuación se
Handler
muestra un ejemplo de una tarea repetida.Relacionado
fuente
mHandler.removeCallbacks(runnableCode)
en el momento adecuado (por ejemplo,onStop()
para una actividad).Copiado de:
TimerTask vs Thread.sleep vs Handler postDelayed: ¿la función más precisa para llamar cada N milisegundos?
fuente
Versión de Kotlin de la respuesta aceptada:
fuente