原文地址
https://mp.weixin.qq.com/s/dh_71i8J5ShpgxgWN5SPEw
想起了我之前的同事,在做启动优化的时候,靠idlehandler来处理。然后碰到了idlehandler没有触发的情况。当时还不是很懂,只觉得这个前同事牛逼,现在觉得这个前同事真的太牛逼了。
『当我们在onDraw方法直接或者间接调用invalidate方法,ViewRootImpl会向MessageQueue里面post 一个同步屏障。
当MessageQueue轮询到这个同步屏障时,会等到Choreographer$FrameDisplayEventReceiver这个异步任务执行之后,才会执行其他任务,即才有可能触发idle。
但是Choreographer$FrameDisplayEventReceiver这个任务里面又会执行View的onDraw方法,从而形成了一个无限循环。进而,idle永远不会回调。』
网友评论