Вопрос

Я использую 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top