UI 卡顿优化

面对 UI 卡顿,如何入手分析解决问题?

https://kaiwu.lagou.com/course/courseInfo.htm?courseId=67#/detail/pc?id=1881

Choreographer小结

Choreographer 是一个承上启下的角色。

承上:接收应用层的各种 callback 输入,包括 input、animation、traversal 绘制。但是这些 callback 并不会被立即执行。而是会缓存在 Choreographer 中的 CallbackQueue 中。

启下:内部的 FrameDisplayEventReceiver 负责接收硬件层发成的 vsync 信号。当接收到 vsync 信号之后,会调用 onVsync 方法 -> doFrame -> doCallbacks,在 doCallbacks 中从 CallbackQueue 中取出进行绘制的 TraversalRunnable,并调用其 run 方法进行绘制。

通过这样一套机制,保证软件层和屏幕刷新处于同一频率,使 Android App 可以以一个比较稳定的帧率运行,减少因为频率波动造成“丢帧”的概率。

利用 Choreographer 实现帧渲染监控

Choreographer 会在 doFrame 方法中回调各种 callback,其中包括绘制 View 的 TraversalRunnable。

Choreographer 向外部提供了 FrameCallback 接口,来监听 doFrame 方法的执行过程。

这个接口中的 doFrame 方法会在绘制每一帧时被调用,所以我们可以在 App 层主动向 Choreographer 中添加 Callback,然后通过检测两次 doFrame 方法执行的时间间隔来判断是否发生“丢帧”。

每一次订阅都只会接收一次 vsync 信号,而我们需要一直监听 doFrame 的回调,因此在方法最后需要递归的执行 postFrameCallback 方法。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值