重翻已生灰的Android书---屏幕刷新机制

可以先了解下重翻已生灰的Android书---View绘制流程及原理

Android是16ms刷新一次屏幕,它是怎么刷新的??

在ViewRootImpl ---> requestLayout()发起UI重绘 --> scheduleTraversals()


image.png

什么时候置为false??

在mTraversalRunnable,这个Runnable线程是接收到Vsync信号,才会执行doTraversal()


image.png

Vsync主要的执行方法是在Choreographer中,FrameDisplayEventReceiver的onVsync方法


image.png

参数timestampNanos是Vsync信号的时间戳,这是用来计算耗时,也就是为什么会出现丢帧。
image.png

image.png

丢帧的原因:主线程做耗时操作,根本原因是Vysnc信号的接收,和View的重绘,调用onDraw方法时机啥的都没关系。
View调用onDraw方法,不会立即执行,必须要接收到Vysnc信号,每隔16ms刷新屏幕,即使View没有被重绘,还是会每隔16ms刷新,只不过刷新的都是旧的同一个数据。
个人总结:屏幕刷新主要在Choreographer中调用的Vsync信号的接收。

这篇文章写的很详细Android 屏幕刷新机制

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

你可能感兴趣的:(重翻已生灰的Android书---屏幕刷新机制)