handler.post(runnable)并不总是在android中执行run方法

Dev*_*eva 5 multithreading android handler

我在主ui线程(mUIHandler)和工作线程(其他线程)中创建了一个Handler实例,当我尝试执行runnable的run方法时,run方法几乎被执行了10次,但是有那个1次没有被执行.

mUIHandler.post(uiRunnable) - >它是否总能保证执行runnable中的run方法?

我甚至添加了日志方法来检查,并且可以看到日志直到post方法innvocation被执行但是run方法日志没有显示.

帖子(可运行)如何在内部工作?是否保证ui线程(带有处理程序的线程)会在调用post后立即执行此操作?

任何帮助,将不胜感激.

谢谢!

小智 11

我在Android 2.2上也遇到过这个问题,在我的例子中,Runnables和Messages都与同一个Handler一起使用.

查看Handler源代码后,发现删除"what"值为0的消息也会删除所有排队的Runnables.发生这种情况是因为在Handler类中,Runnable在内部发布为"what"值为零的消息,这些消息都被任何调用删除removeMessages(0).因此,请避免将零用作消息ID.


Mat*_*ttC 6

我从未见过Handler没有正确运行发布的runnable.要调查的一些事情:

  1. 是否有任何逻辑可能导致线程在执行UI线程runnable时可能与之交互的数据之间的竞争条件?
  2. 你有尝试/捕获任何可能默默地吃异常的地方吗?

我的投票(没有看到你的代码)是它可能是#1.由于并发逻辑,你不会成为第一个成为难以追踪的竞争条件的受害者.