我有一个处理程序,可以定期更新UI。
有时更新可能需要更长的时间间隔。在这种情况下会发生什么? Android是否监控handlemessage
以确保其完成工作,或者我应该自己执行此操作?可能是一个愚蠢的问题,但经过长时间的谷歌搜索后没有找到任何参考。
编辑:
我问,因为我有ConcurrentLinkedQueue
,并且在handlemessage
调用的方法中删除了来自它的元素。它是唯一被删除的地方,但有时我可以看到2个元素被删除而不是一个。像handlemessage
一样被重新输入。
如果根据@Gabe不可能,还有其他解释吗?
答案 0 :(得分:2)
处理程序的所有消息都发生在同一个线程上。因此除非你直接调用handler.handleMessage,否则不可能有重入实例。处理程序是事件循环的一部分 - 事件被发送到Looper对象,当线程完成每个事件时,它从Looper获取下一个事件(在这种情况下,事件是处理程序消息)并按FIFO顺序处理它。 / p>
答案 1 :(得分:2)
发送给Handler
的邮件按顺序排队和处理,但这并不意味着它们以均匀的速度处理。请考虑以下代码:
myHandler.postDelayed(thisRunnableWillTakeTenSeconds, 1000);
myHandler.postDelayed(anotherRunnable, 2000);
第二个Runnable
将在第一个之后执行,而不是在1秒之后执行,因为当第一个{
"_id": ObjectId("57caf0aa229e53a68b2d2ac3"),
"name": "John",
"surname": "Lennon",
"contact": {
"number": "(123)456-7890",
"dial_code": "+44"
},
"__v": 0
}
完成时它已经过期。