2 u014547383 u014547383 于 2015.07.20 10:05 提问

handler.removeMessage(int what)

在activity的onCreate里开启子线程加载数据,加载完了使用handler.sendMessage来通知主线程刷新,我在onDestroy里面用handler.removeMessage(int what)来移除了消息,为什么我退出activity后,当数据加载完还是执行了handler的handlerMessage?

2个回答

u010794180
u010794180   2015.07.20 10:08

从官方文档来说,onDestroy方法的执行并不意味这Activity的销毁。不要被方法名给误导了。

u010794180
u010794180 那我明白了。实际上removeMessage方法的调用,如果消息队列没有存在该id的消息,是没有做任何处理的。一起学习
2 年多之前 回复
u014547383
u014547383 回复yummylau: 虽然最终不知道原因,但还是谢啦,事实上我的onDestory方法里面执行removeMessage时,MeassageQueue还没接收到对应消息去消费,而是在我removeMessage之后的一个时间点,才接收到对应的消息,然后通过handlerMessage消费了,我就是奇怪为什么已经remove了,过了段时间却还能接收到这条消息
2 年多之前 回复
u010794180
u010794180 刚才我看了谷歌的文档,我个人的观点如下:第一,当你在oncreat里面执行后,你退出Activity未必执行onDestory,即使只习惯了onDestory其实Activity资源是没有被释放的。第二,那么你的MessageQueue事实上还是等着接收你发过来的消息。如果我没猜错你应该使用了内部类。第三,当你的MeassageQueue接收到消息后立刻就执行handlerMessage,那么你removeMessage去轮询队列消息应经被消费了。
2 年多之前 回复
u014547383
u014547383 重要的不是这个,是为什么在onDestroy里面用handler.removeMessage(int what)来移除了消息,后面handler还是处理了这条消息
2 年多之前 回复
CSDNXIAOD
CSDNXIAOD   2015.07.20 10:09

What is the ARGB int encoding of pixels in Java's AWT?
EventHub.removeMessages(int what = 107) is not supported before the WebViewCore is set up.
What does "size" in int(size) of MySQL mean?
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

Csdn user default icon
上传中...
上传图片
插入图片