Intereting Posts
CoordinatorLayout пользовательское поведение с AppBarLayout Можно ли выполнить строку кода Java во время выполнения в Android? Позиционирование MediaController над VideoView Как использовать векторные чертежи с представлением помимо ImageView с srcCompat? «Auth_client_using_bad_version_title» переведено здесь, но не найдено в стандартном языковом выражении Как зарегистрировать этот планшет в списке Ubuntu udev? Android ImageButton – определить, какой ресурс установлен в данный момент Android: сбрасывание отскакивания панели инструментов при прокрутке вверх Обработка баз данных перестала работать на Android 2.2.1 (Desire HD 1.72.405.3) Android Studio требует JDK 7 для Android-L mac Увеличьте значение символа на единицу Как выборочно украшать элементы RecyclerView Перевод событий касания с Javascript на jQuery Недостаточные разрешения на геолокацию Как создать настройку активности для отображения половины экрана снизу?

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

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

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

Solutions Collecting From Web of "Отмена процесса handler.postdelayed"

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

 myHandler.postDelayed(myRunnable, SPLASH_DISPLAY_LENGTH); 

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

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

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

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

handler.removeCallbacksAndMessages(null);

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

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