vq.png

    1.主线程耗时操作
    2.16S一次Vsync信号,是否重绘是否申请了重绘,只有申请了重绘的才会进行重绘.
    3.onDraw完之后不会立即刷新,需要等到下次Vsync信号来时,才从缓存中取出图像数据进行刷新。
    4.界面没有重绘,屏幕还是会每隔16ms进行刷新,但刷新展示时去获取的图像缓存一直是旧的。
    5.不管什么时机发起绘制申请都没关系,都会等到下次Vsync信号来时,才进行绘制

    vq2.png
    总结回答
    1.Vsync
    每隔16ms,会发起一起一次vsync信号,当接收到vsnc信号时,view才会进行重绘,如下图所示

    vt.png

    2.choreographer
    当调用requestLayout 申请刷新UI时,会往choreographer中注入callback,choreographer会像SurfaceFlinger申请接收下一个刷新的Vsync的信息,当屏幕刷新Vsync信号来临时,SurfaceFlinger将通知choreographer,由 choreographer触发requestLayout的callback,当callback触发时将执行重绘.

    3417D4EE-6578-4ab0-A2FB-7652C53D72AB.png