it-swarm.it

Come cancellare handler.postDelayed?

Cosa succede se ho il thread handler.postDelayed già in esecuzione e devo cancellarlo?

41
Eugene

Lo faccio per cancellare postDelays, per Android: removeCallbacks rimuove eventuali messaggi in sospeso di Runnable r che si trovano nella coda dei messaggi.

handler.removeCallbacks(runnableRunner);

o utilizzare per rimuovere tutti i messaggi e le richiamate

handler.removeCallbacksAndMessages(null);
61
JPM

Se non vuoi mantenere un riferimento sulla eseguibile, puoi semplicemente chiamare:

handler.removeCallbacksAndMessages(null);

La documentazione ufficiale dice:

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

10
AbdelHady

Avevo un'istanza in cui dovevo cancellare un postDelayed mentre era in esecuzione, quindi il codice sopra non funzionava per il mio esempio. Quello che ho fatto è stato avere un controllo booleano all'interno del mio Runnable, quindi quando il codice è stato eseguito dopo il tempo stabilito, o si sarebbe attivato in base a quale valore booleano era 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;
}

Cordiali saluti: nella mia attività distruggo il codice suggerito dagli altri sviluppatori, handler.removecallback e handler = null; per annullare l'handle solo per mantenere pulito il codice e assicurarsi che tutto venga rimosso.

0
JenniferG