android handlemessage 可以重新输入吗?

Can android handlemessage be reentered?

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

编辑:

我问是因为我有 ConcurrentLinkedQueue,其中的元素在从 handlemessage 调用的方法中被删除。这是它们被移除的唯一地方,但有时我可以看到 2 个元素被移除而不是一个。就像重新输入 handlemessage 一样。 如果根据@Gabe 的说法这是不可能的,还有什么其他解释?

处理程序的所有消息都发生在同一个线程上。因此,除非您直接调用 handler.handleMessage ,否则不可能有重入实例。处理程序是事件循环的一部分——事件被发送到 Looper 对象,当线程完成每个事件时,它从 Looper 获取下一个事件(在这种情况下,事件是处理程序消息)并以 FIFO 顺序处理它。

发送到 Handler 的消息按顺序排队和处理,但这并不意味着它们以均匀的速度处理。考虑这段代码:

myHandler.postDelayed(thisRunnableWillTakeTenSeconds, 1000);
myHandler.postDelayed(anotherRunnable, 2000);

第二个 Runnable 将在第一个之后立即执行,而不是 1 秒后,因为当第一个完成时它已经过期了。