отмена процесса handler.postdelayed - PullRequest
       42

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

236 голосов
/ 07 декабря 2010

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

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

Ответы [ 6 ]

450 голосов
/ 07 декабря 2010

Я делаю это для публикации отложенного запуска:

myHandler.postDelayed(myRunnable, SPLASH_DISPLAY_LENGTH); 

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

42 голосов
/ 30 июля 2017

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

handler.removeCallbacksAndMessages(null);

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

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

17 голосов
/ 07 декабря 2010

Другой способ - обработать сам Runnable:

Runnable r = new Runnable {
    public void run() {
        if (booleanCancelMember != false) {
            //do what you need
        }
    }
}
0 голосов
/ 18 февраля 2019

Вот класс, предоставляющий метод отмены для отложенного действия

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);
}}
0 голосов
/ 12 января 2019

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

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

0 голосов
/ 22 марта 2017

Это сработало для меня, когда я вызвал CancelCallBacks (this) внутри отложенного запускаемого запуска, передав его через логическое значение

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);
        }
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...