说说IdleHandler的原理
MessageQueue里的addIdleHandler方法
IdleHandler的调用时机:当next方法里的nativePollOnce返回后,并且当前时刻MessageQueue里没有message需要分发的话,就要处理idleHandler了
Framework里哪些地方用到了IdleHandler
主线程添加了一个CG操作的IdleHandler,返回false,说明这个CG IdleHandler只执行了一次。
queueIdle返回false:只执行一次
mMessageQueue.addIdleHandler(new Idle(recipient)); 添加这个Idle时有可能当前的MessageQueue就是Idle状态,这个Idle的queueIdle是不会被触发的,所以下一行往MessageQueue里添加了一个message,EmptyRunnable这就确保了这个Idle肯定会被执行的
同步等待线程进入idle状态
postDelayed:可以换成IdleHandler的解决方案,更合理
场景:打开App时收到一堆推送,此时需要逐个处理这些推送,每处理一条推送就需要刷新一下界面,如果刷新界面是个很重的task的话,每处理一条推送就刷新一下界面不太合理。
解决方法:开一个工作线程,启动MessageQueue,并添加一个IdleHandler,来一个推送就将其封装成消息放到工作线程的MessageQueue里去处理,等这些消息全部处理完后,MessageQueue处于Idle状态,这时再去汇总结果,刷新界面。
说说IdleHandler的原理?
这个是干嘛的?
他的实现原理是怎么样的?
他是怎么触发的?IdleHandler.queueIdle()的返回结果有什么意义?return true: 一直有效, return false:一次性的
3. 自己的项目中用到了没有,举例说明下
网友评论