отмена обработчика.процесс postdelayed


Я использую handler.postDelayed() чтобы создать период ожидания до следующего этапа моего приложения происходит. В течение периода ожидания я показываю диалог с индикатором выполнения и отмена.

моя проблема в том, что я не могу найти способ отменить postDelayed задача до истечения времени.

4 217

4 ответа:

Я делаю это, чтобы опубликовать отложенный запуск:

myHandler.postDelayed(myRunnable, SPLASH_DISPLAY_LENGTH); 

и это, чтобы удалить его:myHandler.removeCallbacks(myRunnable);

в случае, если у вас есть несколько внутренних/анонимных runnables, переданных одному и тому же обработчику, и вы хотите отменить все при одном и том же событии use

handler.removeCallbacksAndMessages(null);

согласно документации,

удалите все ожидающие сообщения обратных вызовов и отправленных сообщений, объект которых знак. Если токен имеет значение null, все обратные вызовы и сообщения будут удалены.

другой способ-это обрабатывать сам Runnable:

Runnable r = new Runnable {
    public void run() {
        if (booleanCancelMember != false) {
            //do what you need
        }
    }
}

это сработало для меня, когда я вызвал CancelCallBacks (this) внутри post delayed runnable, передав его через логическое

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);
        }
    }
};