如何取消handler.postDelayed?

时间:2011-09-13 19:19:38

标签: android

如果我的handler.postDelayed线程已经执行并且我需要取消它会怎么样?

3 个答案:

答案 0 :(得分:66)

我这样做取消postDelays,根据Android:removeCallbacks删除消息队列中任何待处理的Runnable r帖子。

handler.removeCallbacks(runnableRunner);

或用于删除所有邮件和回调

handler.removeCallbacksAndMessages(null);

答案 1 :(得分:11)

如果您不想保留runnable的引用,可以直接致电:

handler.removeCallbacksAndMessages(null);

The official documentation说:

  

...如果token为null,则将删除所有回调和消息。

答案 2 :(得分:0)

我有一个实例,我需要在运行过程中取消postDelayed,因此上面的代码对我的示例不起作用。我最终做的是在我的Runnable中进行布尔检查,所以当在给定时间之后执行代码时,它将根据当时的布尔值触发并且对我有效。

 public static Runnable getCountRunnable() {
    if (countRunnable == null) {
        countRunnable = new Runnable() {
            @Override
            public void run() {
                if (hasCountStopped)
                    getToast("The count has stopped");
            }
        };
    }
    return countRunnable;
}

仅供参考 - 在我的活动中,我会使用其他开发人员建议的代码,handler.removecallback和handler = null;取消手柄只是为了保持代码清洁,并确保一切都将被删除。