2011-09-13 10 views
28

Cosa succede se il thread handler.postDelayed è già in esecuzione e devo annullarlo?Come cancellare handler.postDelayed?

+0

L'intero thread o solo il messaggio? –

+0

L'intero thread. – Eugene

+0

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

risposta

46

Faccio questo per annullare postDelays, per Android: removeCallbacks rimuove eventuali messaggi in sospeso di Runnable r che si trovano nella coda messaggi.

handler.removeCallbacks(runnableRunner); 

o utilizzare per rimuovere tutti i messaggi e le richiamate

handler.removeCallbacksAndMessages(null); 
+0

Ulteriori informazioni con snipet: http://stackoverflow.com/questions/5885587/how-to-cancel-handler-in-code – Basher51

9

Se non si desidera mantenere un riferimento della eseguibile, si potrebbe semplicemente chiamare:

handler.removeCallbacksAndMessages(null); 

The official documentation dice :

... Se il token è nullo, al I callback e i messaggi verranno rimossi.

0

ho avuto un caso in cui avevo bisogno di annullare una postDelayed mentre era in fase di esecuzione, in modo che il codice di cui sopra non ha funzionato per il mio esempio. Quello che ho finito è stato eseguire un controllo booleano all'interno del mio Runnable, quindi quando il codice è stato eseguito dopo il tempo specificato, si sarebbe attivato in base al valore booleano in quel momento e che ha funzionato per me.

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

CRONACA - nella mia attività distruggo io uso il codice suggerito da altri sviluppatori, handler.removecallback e conduttore = null; per annullare l'handle solo per mantenere pulito il codice e assicurarsi che tutto venga rimosso.