我的子 Activity 有一个 Handler ,它由主 Activity 调用。这个 Handler 被子类使用到 postDelay
一些 Runnables,我无法管理它们。现在,在 onStop
事件中,我需要在完成 Activity 之前删除它们(不知何故,我调用了 finish()
,但它仍然一次又一次地调用)。无论如何要从处理程序中删除所有回调?
原文由 Luke Vo 发布,翻译遵循 CC BY-SA 4.0 许可协议
我的子 Activity 有一个 Handler ,它由主 Activity 调用。这个 Handler 被子类使用到 postDelay
一些 Runnables,我无法管理它们。现在,在 onStop
事件中,我需要在完成 Activity 之前删除它们(不知何故,我调用了 finish()
,但它仍然一次又一次地调用)。无论如何要从处理程序中删除所有回调?
原文由 Luke Vo 发布,翻译遵循 CC BY-SA 4.0 许可协议
对于任何特定的 Runnable
实例,调用 Handler.removeCallbacks()
。请注意,它使用 Runnable
实例本身来确定要注销哪些回调,因此如果您在每次发布帖子时都创建一个新实例,则需要确保引用了确切的 Runnable
取消。例子:
Handler myHandler = new Handler();
Runnable myRunnable = new Runnable() {
public void run() {
//Some interesting task
}
};
您可以调用 myHandler.postDelayed(myRunnable, x)
将另一个回调发布到代码中其他位置的消息队列,并删除所有挂起的回调 myHandler.removeCallbacks(myRunnable)
不幸的是,您不能简单地“清除”整个 MessageQueue
对于 Handler
,即使您请求 MessageQueue
与之相关联的方法——对象添加和删除项目是受包保护的(只有 android.os 包中的类可以调用它们)。您可能必须创建一个薄的 Handler
子类来管理 Runnable
的列表,因为它们已发布/执行……或者查看另一种范例,以便在每个 Activity
希望有帮助!
原文由 devunwired 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.3k 阅读
1 回答4.1k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
1 回答2.1k 阅读✓ 已解决
根据我的经验,这很有效!
在 removeCallbacksAndMessages 的文档中,它说…