页面是APP最直观的呈现,它的流畅与否直接决定了用户的去留。本次与大家一起去看看页面刷新背后的秘密。
角色
ViewRootImpl 看名字就很明白了(视图源头)
(1) 视图最终的呈现由它触发,它内部打通了人机交互的门槛
(2) 既然作为视图的根,子视图的刷新请求必然最终都是委托它来发送,同样子视图的绘制流程源头也是由它发起的。
问题来了,既然 ViewRootImpl负责视图刷新请求的发送,也真实发起页面绘制,自己干不就可以了??
Choreographer “编舞者” ,具有编排,设计的能力。
(1) 对系统屏幕刷新信号获取
(2) 在刷新信号到来时,编排刷新任务(常编排任务有:tranversal(视图刷新), animation(属性动画))
关于屏幕刷新:屏幕刷新频率60hz,那么刷新的一个时钟周期为16.6ms,正常情况上一个时钟周期的绘制内容会在下一个时钟周期中展示。
关于丢帧:实际上就是在一个时钟周期内无法完成绘制任务。页面卡顿:是丢了若干帧后视觉能明显感觉到不流畅。
编排的作用:就是找准正确的刷新时机,而任务编排则帮助我们在合适的时机将编排的任务执行起来。
局部/全局刷新
触发页面刷新最终只有两种方式:invalidate, requestlayout&#x