Ответ 1
Я делаю это, чтобы опубликовать задержанную runnable:
myHandler.postDelayed(myRunnable, SPLASH_DISPLAY_LENGTH);
И это, чтобы удалить его: myHandler.removeCallbacks(myRunnable);
Я использую handler.postDelayed()
для создания периода ожидания до следующего этапа моего приложения. Во время периода ожидания я показываю диалог с индикатором выполнения и отменить.
Моя проблема: я не могу найти способ отменить задачу postDelayed до истечения времени.
Я делаю это, чтобы опубликовать задержанную runnable:
myHandler.postDelayed(myRunnable, SPLASH_DISPLAY_LENGTH);
И это, чтобы удалить его: myHandler.removeCallbacks(myRunnable);
Если у вас есть несколько внутренних/анонимных runnables, переданных одному обработчику, и вы хотите отменить все при одном и том же мероприятии
handler.removeCallbacksAndMessages(null);
Согласно документации,
Удалите все ожидающие сообщения обратных вызовов и отправленные сообщения, obj которых маркер. Если токен равен нулю, все обратные вызовы и сообщения будут удалены.
Другим способом является обработка самого Runnable:
Runnable r = new Runnable {
public void run() {
if (booleanCancelMember != false) {
//do what you need
}
}
}
Это сработало для меня, когда я вызвал 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);
}
}
};
Надеюсь, что это поможет суть https://gist.github.com/imammubin/a587192982ff8db221da14d094df6fb4
MainActivity как Screen Launcher с обработчиком и функцией runnable, Runnable запускает страницу входа или страницу фида с базовым предпочтением пользователя для входа в систему с помощью firebase.