Отмена процесса handler.postdelayed

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

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

Ответ 1

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

myHandler.postDelayed(myRunnable, SPLASH_DISPLAY_LENGTH); 

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

Ответ 2

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

handler.removeCallbacksAndMessages(null);

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

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

Ответ 3

Другим способом является обработка самого Runnable:

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

Ответ 4

Это сработало для меня, когда я вызвал CancelCallBacks (this) внутри post delayed runnable, передав его через 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);
        }
    }
};

Ответ 5

Надеюсь, что это поможет суть https://gist.github.com/imammubin/a587192982ff8db221da14d094df6fb4

MainActivity как Screen Launcher с обработчиком и функцией runnable, Runnable запускает страницу входа или страницу фида с базовым предпочтением пользователя для входа в систему с помощью firebase.