我有一个处理程序,可以从计时器定期更新UI。
有时,更新可能需要比计时器间隔更长的时间。在这种情况下会发生什么? Android是否监视handlemessage
以确保其完成工作,还是我自己完成?可能是一个愚蠢的问题,但经过长时间的搜寻后没有找到任何引用。
编辑:
我问是因为我有ConcurrentLinkedQueue
,并且从其中的元素在handlemessage
调用的方法中被删除了。这是唯一删除它们的地方,但是有时我可以看到删除了2个元素,而不是一个。像handlemessage
被重新输入。
如果根据@Gabe不可能,那么还有什么其他解释?
最佳答案
发送给处理程序的所有消息都在同一线程上发生。因此,除非您直接调用handler.handleMessage,否则不可能有重入实例。处理程序是事件循环的一部分-事件被发送到Looper对象,并且当线程完成每个事件时,它会从Looper获取下一个事件(在这种情况下,该事件是处理程序消息)并按FIFO顺序进行处理。