可以重新输入android handlemessage吗?

时间:2016-09-07 17:13:59

标签: android multithreading timer android-handler

我有一个处理程序,可以定期更新UI。 有时更新可能需要更长的时间间隔。在这种情况下会发生什么? Android是否监控handlemessage以确保其完成工作,或者我应该自己执行此操作?可能是一个愚蠢的问题,但经过长时间的谷歌搜索后没有找到任何参考。

编辑:

我问,因为我有ConcurrentLinkedQueue,并且在handlemessage调用的方法中删除了来自它的元素。它是唯一被删除的地方,但有时我可以看到2个元素被删除而不是一个。像handlemessage一样被重新输入。 如果根据@Gabe不可能,还有其他解释吗?

2 个答案:

答案 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 } 完成时它已经过期。