【发布时间】:2011-11-16 11:02:22
【问题描述】:
如果我有 handler.postDelayed 线程已经在执行中并且我需要取消它怎么办?
【问题讨论】:
-
整个线程还是只是消息?
-
Quit它。
标签: android
如果我有 handler.postDelayed 线程已经在执行中并且我需要取消它怎么办?
【问题讨论】:
标签: android
我这样做是为了取消 postDelays,根据 Android:removeCallbacks 删除消息队列中 Runnable r 的所有待处理帖子。
handler.removeCallbacks(runnableRunner);
或用于删除所有消息和回调
handler.removeCallbacksAndMessages(null);
【讨论】:
如果您不想保留可运行对象的引用,您可以简单地调用:
handler.removeCallbacksAndMessages(null);
...如果token为null,所有回调和消息都会被移除。
【讨论】:
我有一个实例,我需要在 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;取消句柄只是为了保持代码干净并确保所有内容都将被删除。
【讨论】: