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

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

###Android是16ms刷新一次屏幕,它是怎么刷新的??
在ViewRootImpl —> requestLayout()发起UI重绘 --> scheduleTraversals()
image.png
###什么时候置为false??
在mTraversalRunnable,这个Runnable线程是接收到Vsync信号,才会执行doTraversal()
image.png
Vsync主要的执行方法是在Choreographer中,FrameDisplayEventReceiver的onVsync方法
[外链图片转存失败(img-e4M4KZJJ-1566129323831)(https://upload-images.jianshu.io/upload_images/3156973-6eef9f39124d21e7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
参数timestampNanos是Vsync信号的时间戳,这是用来计算耗时,也就是为什么会出现丢帧。
image.png
image.png
丢帧的原因:主线程做耗时操作,根本原因是Vysnc信号的接收,和View的重绘,调用onDraw方法时机啥的都没关系。
View调用onDraw方法,不会立即执行,必须要接收到Vysnc信号,每隔16ms刷新屏幕,即使View没有被重绘,还是会每隔16ms刷新,只不过刷新的都是旧的同一个数据。
个人总结:屏幕刷新主要在Choreographer中调用的Vsync信号的接收。
###这篇文章写的很详细Android 屏幕刷新机制

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值