отмена обработчика.процесс postdelayed

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

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

6 ответов

  1. В случае, если у вас есть несколько внутренних / анонимных исполняемых файлов, переданных одному обработчику, и вы хотите отменить все при одном использовании события

    handler.removeCallbacksAndMessages(null);

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

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

  2. Другой способ состоит в том, чтобы справиться с самим Runnable:

    Runnable r = new Runnable {
        public void run() {
            if (booleanCancelMember != false) {
                //do what you need
            }
        }
    }
    
  3. Это сработало для меня, когда я вызвал 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);
            }
        }
    };
    
  4. Вот класс, предоставляющий метод cancel для отложенного действия

    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);
    }}
    
  5. Надеюсь это поможет https://gist.github.com/imammubin/a587192982ff8db221da14d094df6fb4

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

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

    myHandler.postDelayed(myRunnable, SPLASH_DISPLAY_LENGTH); 
    

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