Отмена обработчика. POSTDELAYED PROCES
-
09-10-2019 - |
Вопрос
Я использую handler.postDelayed()
Чтобы создать период ожидания до того, как состоится следующий этап моего приложения. В период ожидания я отображаю диалог с панелью прогресса и Отмена кнопка.
Моя проблема в том, что я не могу найти способ Отменить постделей Задача до того, как истечет время.
Решение
Я делаю это, чтобы опубликовать задержанный бегство:
myHandler.postDelayed(myRunnable, SPLASH_DISPLAY_LENGTH);
И это удалить его: myHandler.removeCallbacks(myRunnable);
Другие советы
В случае, если у вас есть несколько внутренних/анонимных пробег, передаваемых в тот же обработчик, и вы хотите отменить все с тем же использованием событий
handler.removeCallbacksAndMessages(null);
Согласно документации,
Удалите любые ожидающие посты обратных вызовов и отправленные сообщения, чьи OBJ - токен. Если токен нуль, все обратные вызовы и сообщения будут удалены.
Другой способ - справиться с самим бегством:
Runnable r = new Runnable {
public void run() {
if (booleanCancelMember != false) {
//do what you need
}
}
}
Это сработало для меня, когда я позвонил CancelCallbacks (это) внутри поста, задержанного запускаемой, передавая его через логический
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);
}
}
};
Вот класс, предоставляющий метод отмены для отсроченного действия
public class DelayedAction {
private Handler _handler;
private Runnable _runnable;
/**
* Constructor
* @param runnable The runnable
* @param delay The delay (in milli sec) to wait before running the runnable
*/
public DelayedAction(Runnable runnable, long delay) {
_handler = new Handler(Looper.getMainLooper());
_runnable = runnable;
_handler.postDelayed(_runnable, delay);
}
/**
* Cancel a runnable
*/
public void cancel() {
if ( _handler == null || _runnable == null ) {
return;
}
_handler.removeCallbacks(_runnable);
}}
Надеюсь, эта суть поможет https://gist.github.com/imammubin/a587192982ff8db221da14d094df6fb4
MainActivity As Screen Launcher с функцией Handler & Runnable, выполнение запуска для входа для входа или страницы подачи с пользователем входа в систему предпочтений с Firebase.