【问题标题】:How to cancel handler.postDelayed?如何取消 handler.postDelayed?
【发布时间】:2011-11-16 11:02:22
【问题描述】:

如果我有 handler.postDelayed 线程已经在执行中并且我需要取消它怎么办?

【问题讨论】:

标签: android


【解决方案1】:

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

handler.removeCallbacks(runnableRunner);

或用于删除所有消息和回调

handler.removeCallbacksAndMessages(null);

【讨论】:

【解决方案2】:

如果您不想保留可运行对象的引用,您可以简单地调用:

handler.removeCallbacksAndMessages(null);

The official documentation 说:

...如果token为null,所有回调和消息都会被移除。

【讨论】:

    【解决方案3】:

    我有一个实例,我需要在 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;取消句柄只是为了保持代码干净并确保所有内容都将被删除。

    【讨论】:

      猜你喜欢
      • 2011-05-21
      • 1970-01-01
      • 2013-09-24
      • 2014-05-08
      • 2020-06-18
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      相关资源
      最近更新 更多