取消handler.postdelayed进程

问题描述 投票:231回答:6

我正在使用handler.postDelayed()在我的应用程序的下一个阶段发生之前创建一个等待期。在等待期间,我显示一个带有进度条和取消按钮的对话框。

我的问题是我找不到在时间流逝之前取消postDelayed任务的方法。

android android-handler postdelayed
6个回答
456
投票

我这样做是为了发布延迟的runnable:

myHandler.postDelayed(myRunnable, SPLASH_DISPLAY_LENGTH); 

这要删除它:myHandler.removeCallbacks(myRunnable);


47
投票

如果你有多个内部/匿名runnables传递给同一个处理程序,并且你想在相同的事件使用时取消所有

handler.removeCallbacksAndMessages(null);

根据文件,

删除任何待处理的回调帖子,并发送obj为令牌的邮件。如果token为null,则将删除所有回调和消息。


18
投票

另一种方法是处理Runnable本身:

Runnable r = new Runnable {
    public void run() {
        if (booleanCancelMember != false) {
            //do what you need
        }
    }
}

0
投票

当我通过一个布尔值处理它来延迟runnable的帖子中调用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);
        }
    }
};

0
投票

这是一个为延迟动作提供取消方法的类

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

-1
投票

希望这个要点帮助https://gist.github.com/imammubin/a587192982ff8db221da14d094df6fb4

MainActivity作为具有处理程序和可运行功能的Screen Launcher,Runnable运行到登录页面或具有基本首选项登录用户和firebase的供稿页面。

© www.soinside.com 2019 - 2024. All rights reserved.