Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android handlemessage可以重新输入吗?_Android_Multithreading_Timer_Android Handler - Fatal编程技术网

android handlemessage可以重新输入吗?

android handlemessage可以重新输入吗?,android,multithreading,timer,android-handler,Android,Multithreading,Timer,Android Handler,我有一个处理程序,可以从计时器定期更新UI。 有时更新可能需要比计时器间隔更长的时间。在这种情况下会发生什么?Android是否监控handlemessage以确保它完成工作,还是我应该自己做?可能是个愚蠢的问题,但在长时间的谷歌搜索后,没有找到任何关于它的参考 编辑: 我之所以这样问,是因为我有ConcurrentLinkedQueue,其中的元素在从handlemessage调用的方法中被删除。这是唯一一个删除元素的地方,但有时我可以看到删除了两个元素而不是一个。重新输入了Likehandl

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

编辑:

我之所以这样问,是因为我有
ConcurrentLinkedQueue
,其中的元素在从
handlemessage
调用的方法中被删除。这是唯一一个删除元素的地方,但有时我可以看到删除了两个元素而不是一个。重新输入了Like
handlemessage

根据@Gabe的说法,如果这是不可能的,那么还有什么其他解释呢?

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

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

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

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

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

发送给
处理程序的消息将按顺序排队和处理,但这并不意味着它们的处理速度是均匀的。考虑这个代码:

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

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

不行,您必须按照您的逻辑自己执行。是否有任何参考资料证实了这一点?只是想知道我错过了什么链接。:)不,不可能。你必须按照你的逻辑自己做。有没有证据证实这一点?只是想知道我错过了什么链接。:)