отмена обработчика.процесс postdelayed
Я использую handler.postDelayed()
чтобы создать период ожидания до следующего этапа моего приложения происходит. В течение периода ожидания я показываю диалог с индикатором выполнения и отмена.
моя проблема в том, что я не могу найти способ отменить postDelayed задача до истечения времени.
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); } } };