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:
Handleres mejor queTimerTask.Tanto Java
TimerTaskcomo Android leHandlerpermiten programar tareas retrasadas y repetidas en subprocesos en segundo plano. Sin embargo, la literatura recomienda abrumadoramente usarHandleroverTimerTasken 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
Handlermuestra 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