采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,MessagQueue.next里边,没有消息的时候,nativePollOnce应该阻塞了啊,为什么还会有mMessage等于null的情况去处理IdleHandler?
您好,nativePollOnce有三种情况会返回,出错,超时,或者有新消息来了。
重点是next第一次循环的超时是0,也就是不会阻塞,这时候如果发现没有消息,就会走IdleHandler。
我把这部分重新看了一下,明白了,多谢
那如果不是第一次呢,且这时消息队列里面没有消息,然后超时时间为-1,这时候进入阻塞状态,这时候idleHandler怎么执行到呢?
从代码看来,IdleHandler只有第一次才有可能调到。第一次之后pendingIdleHandlerCount会设为0,所以会提前continue了。
说说我的理解:1.如果队列中没有消息,比如刚创建的时候,会先调IdleHandler的回调,然后进入阻塞;
2.如果next中遇到了一条延迟消息,也会先调IdleHandler的回调,然后进入阻塞;
阻塞总发生在下一次循环,当前循环如果有消息就处理消息,否则就设置阻塞时间。
登录后可查看更多问答,登录/注册
一手助力冲刺Android高级职位,一手把握系统底层原理,理清面试思路,提升技术段位
2.9k 4
874 16
867 8
1.1k 8
1.4k 7
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号