odwoływanie opiekuna.proces postdelayed

Używam handler.postDelayed(), aby utworzyć okres oczekiwania przed kolejnym etapem mojej aplikacji. W okresie oczekiwania wyświetlane jest okno dialogowe z paskiem postępu i przyciskiem anuluj .

Mój problem polega na tym, że nie mogę znaleźć sposobu na anulowanie zadania postDelayed przed upływem czasu.

Author: Sufian, 2010-12-07

4 answers

Robię to, aby opublikować opóźniony runnable:

myHandler.postDelayed(myRunnable, SPLASH_DISPLAY_LENGTH); 

I to do usunięcia: myHandler.removeCallbacks(myRunnable);

 428
Author: Varun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-30 01:27:44

W przypadku, gdy masz wiele wewnętrznych/anonimowych runnables przekazanych do tego samego programu obsługi i chcesz anulować wszystkie w tym samym zdarzeniu użyj

handler.removeCallbacksAndMessages(null);

Zgodnie z dokumentacją,

Usuń wszystkie oczekujące posty wywołań zwrotnych i wysłanych wiadomości, których obj jest token. Jeśli token jest null, wszystkie wywołania zwrotne i wiadomości zostaną usunięte.

 28
Author: Mani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-31 23:36:22

Innym sposobem jest obsługa samego Runnable:

Runnable r = new Runnable {
    public void run() {
        if (booleanCancelMember != false) {
            //do what you need
        }
    }
}
 16
Author: codeScriber,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-25 22:24:57

To działało dla mnie, gdy zadzwoniłem CancelCallBacks (to) wewnątrz Post opóźniony runnable przekazując go przez boolean

Runnable runnable = new Runnable(){
    @Override
    public void run() {
        Log.e("HANDLER", "run: Outside Runnable");
        if (IsRecording) {
            Log.e("HANDLER", "run: Runnable");
            handler.postDelayed(this, 2000);
        }else{
            handler.removeCallbacks(this);
        }
    }
};
 1
Author: Ramin Fallahzadeh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-22 02:06:24