Timertask o manejador

Hola Tengo una pregunta rápida. Digamos que quiero realizar alguna acción cada 10 segundos y no necesariamente necesito actualizar la vista. La pregunta es: ¿es mejor (me refiero a más eficiente y eficaz) para utilizar 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 manejador con postdelayed

 final Handler handler = new Handler(); final Runnable r = new Runnable() { public void run() { <some task> } }; handler.postDelayed(r, 15000); 

También estaría agradecido si pudiera explicar cuándo utilizar qué enfoque y por qué uno de ellos es más eficiente que otro (si es que realmente lo es). Gracias.

Handler es mejor que TimerTask .

Java TimerTask y el TimerTask Android permiten programar tareas repetidas y retardadas en los subprocesos de fondo. Sin embargo, la literatura recomienda abrumadoramente Handler sobre TimerTask en Android (véase aquí , aquí , aquí , aquí , aquí y aquí ).

Algunos de los problemas informados con TimerTask incluyen:

  • No se puede actualizar el subproceso de la interfaz de usuario
  • Pérdidas de memoria
  • No confiable (no siempre funciona)
  • Las tareas de larga ejecución pueden interferir con el próximo evento programado

Ejemplo

La mejor fuente para todo tipo de ejemplos de Android que he visto es en Codepath . Aquí hay un ejemplo de Handler de allí para una tarea de repetición.

 // 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); 

Relacionado

  • Handler vs Timer: ejecución de período fijo y desarrollo de android de ejecución de tasa fija

Hay algunas desventajas de usar Timer

Crea solo un solo hilo para ejecutar las tareas y si una tarea tarda demasiado en ejecutarse, otras tareas sufren. No maneja las excepciones lanzadas por las tareas y el hilo acaba de terminar, lo que afecta a otras tareas programadas y nunca se ejecutan

Copiado de:

TimerTask vs Thread.sleep vs Handler postDelayed – más preciso para llamar a la función cada N milisegundos?

  • Cómo ejecutar la tarea Async repetidamente después de intervalos de tiempo fijos
  • Temporizador La tarea deja de ejecutarse después de un tiempo indefinido en android
  • Inicie Android Service cada 5 minutos
  • Lanzar null pointerException en Timer.Schedule ();
  • Android: Acceso al elemento de interfaz de usuario desde el subproceso del temporizador
  • Cómo llamar a onUpdate () en AppWidgetProvider?
  • Java - Timer.cancel () v / s TimerTask.cancel ()
  • Error de Android: "No se pudo crear la instancia de epoll" o "No se pudo crear el canal de despertador"
  • Cómo pausar y reanudar un TimerTask / Timer
  • Tarea del temporizador VS Uso del administrador de alarmas en el servicio de Android
  • Obtención de metadatos de SHOUTcast utilizando IcyStreamMeta
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.