IdleHandler原理的疑问

来源:8-4 说说idleHandler的原理

鹤仙人peter

2019-10-24

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

写回答

2回答

风语

2019-10-30

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

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

1
3
风语
回复
慕尼黑4061373
从代码看来,IdleHandler只有第一次才有可能调到。第一次之后pendingIdleHandlerCount会设为0,所以会提前continue了。
2020-04-19
共3条回复

Stronger3594243

2020-11-25

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

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


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

0
0

剖析Framework面试 冲击Android高级职位

一手助力冲刺Android高级职位,一手把握系统底层原理,理清面试思路,提升技术段位

1406 学习 · 187 问题

查看课程