请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

IdleHandler原理的疑问

老师,MessagQueue.next里边,没有消息的时候,nativePollOnce应该阻塞了啊,为什么还会有mMessage等于null的情况去处理IdleHandler?

正在回答 回答被采纳积分+3

插入代码

2回答

风语 2019-10-30 14:34:31

您好,nativePollOnce有三种情况会返回,出错,超时,或者有新消息来了。

重点是next第一次循环的超时是0,也就是不会阻塞,这时候如果发现没有消息,就会走IdleHandler。

1 回复 有任何疑惑可以回复我~
  • 提问者 鹤仙人peter #1
    我把这部分重新看了一下,明白了,多谢
    回复 有任何疑惑可以回复我~ 2019-11-05 13:43:53
  • 那如果不是第一次呢,且这时消息队列里面没有消息,然后超时时间为-1,这时候进入阻塞状态,这时候idleHandler怎么执行到呢?
    回复 有任何疑惑可以回复我~ 2020-04-15 22:02:27
  • 从代码看来,IdleHandler只有第一次才有可能调到。第一次之后pendingIdleHandlerCount会设为0,所以会提前continue了。
    回复 有任何疑惑可以回复我~ 2020-04-19 03:10:21
Stronger3594243 2020-11-25 20:45:43

说说我的理解:1.如果队列中没有消息,比如刚创建的时候,会先调IdleHandler的回调,然后进入阻塞;

2.如果next中遇到了一条延迟消息,也会先调IdleHandler的回调,然后进入阻塞;


阻塞总发生在下一次循环,当前循环如果有消息就处理消息,否则就设置阻塞时间。

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号