usar studio radiogroup radiobutton evento como android performance timer handler timertask

android - studio - Timertask o Handler



radiobutton android checked (2)

Digamos que quiero realizar alguna acción cada 10 segundos y no necesariamente es necesario actualizar la vista.

La pregunta es: ¿es mejor (me refiero a más eficiente y efectivo) usar el temporizador con cronometraje 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 posletariado

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 utilizar qué enfoque y por qué uno de ellos es más eficiente que otro (si es que realmente lo es).



Handler es mejor que TimerTask .

Java TimerTask y Android Handler permiten programar tareas demoradas y repetidas en los hilos de fondo. Sin embargo, la literatura recomienda abrumadoramente el uso de Handler sobre TimerTask en Android (ver here , here , here , here , aquí y here ).

Algunos de los problemas informados con TimerTask incluyen:

  • No se puede actualizar el hilo de la interfaz de usuario
  • Pérdidas de memoria
  • No confiable (no siempre funciona)
  • Las tareas de larga duració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 here . Aquí hay un ejemplo de Handler de allí para una tarea repetitiva.

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