2011-09-13 16 views
28

¿Qué sucede si tengo el hilo handler.postDelayed ya en ejecución y necesito cancelarlo?Cómo cancelar handler.postDelayed?

+0

Todo el hilo o simplemente el mensaje? –

+0

Todo el hilo. – Eugene

+0

[Salir] (http://developer.android.com/reference/android/os/HandlerThread.html#quit()) it. –

Respuesta

46

Lo hago para cancelar postDelays, por el Android: removeCallbacks elimina cualquier publicación pendiente de Runnable r que están en la cola de mensajes.

handler.removeCallbacks(runnableRunner); 

o utilizar para eliminar todos los mensajes y las devoluciones de llamada

handler.removeCallbacksAndMessages(null); 
+0

Más información con snipet: http://stackoverflow.com/questions/5885587/how-to-cancel-handler-in-code – Basher51

9

Si no desea mantener una referencia del ejecutable, simplemente podría llamar:

handler.removeCallbacksAndMessages(null); 

The official documentation dice :

... Si el token es nulo, al l devoluciones de llamada y mensajes serán eliminados.

0

Tuve una instancia en la que necesitaba cancelar una publicación Detenida mientras estaba en proceso de ejecución, por lo que el código anterior no funcionaba para mi ejemplo. Lo que terminé haciendo fue tener un cheque booleano dentro de Runnable así que cuando el código se ejecutara después del tiempo dado, se dispararía según el valor booleano en ese momento y eso funcionó para mí.

public static Runnable getCountRunnable() { 
    if (countRunnable == null) { 
     countRunnable = new Runnable() { 
      @Override 
      public void run() { 
       if (hasCountStopped) 
        getToast("The count has stopped"); 
      } 
     }; 
    } 
    return countRunnable; 
} 

FYI - en mi actividad destruyo hago uso de código sugerido por el otro los desarrolladores, handler.removecallback y manejador = null; para cancelar el mango solo para mantener el código limpio y asegurarse de que todo se elimine.