一.怎么衡量流程性
1.帧率 FPS
游戏60FPS ,电影 FPS 25FPS ~ 30FPS,人眼 12FPS
FPS 低并不意味着卡顿发生,而卡顿发生 FPS 一定不高。
2.掉帧程度可以更直观地衡量卡顿
16ms,如果一帧的准备时间超出这个值,则认为发生掉帧,假设每帧准备时间约 32ms,每次只掉一帧,那么 1 秒内实际只刷新 30 帧,即平均帧率只有 30FPS,但这时往往不会觉得是卡顿。反而如果出现某次严重掉帧(>300ms),那么这一次的变化,通常很容易感知到。所以界面的掉帧程度,往往可以更直观的反映出卡顿。
| Best | Normal | Middle | High | Frozen |
|---|---|---|---|---|
| [0:3) | [3:9) | [9:24) | [24:42) | [42:∞) |
Activity 掉帧程度的分布情况及平均帧率 *
相比单看平均帧率,掉帧程度的分布可以明显的看出,界面卡顿(平均帧率低)的原因是因为连续轻微的掉帧(下图1),还是某次严重掉帧造成的(下图2)。

再通过 Activity 区分不同场景,计算每个界面在有效绘制的时间片内,掉帧程度的分布情况及平均帧率,从而来评估出一个界面的整体流畅程度。

二.原理
1.Vsync,Choreographer 编舞者
1.1 View 的绘制
View 的绘制会经过 Measure、Layout、Draw 这 3 个阶段,而这 3 个阶段的工作都是由 CPU 来负责完成。另外 CPU 还会负责一些用户输入、View 动画等事件,这部分工作都是在 UI 线程中完成。
当 CPU 绘制完成之后,会在 Rede

本文介绍了Android应用流畅性衡量标准,如帧率FPS和掉帧程度,深入探讨了Vsync和Choreographer的原理。通过TraceCanary,分析了主线程监控的实现方式,包括Looper和Choreographer,以及如何处理运行时数据存储和堆栈聚类问题,以优化卡顿。虽然集成方便,但数据采集和分析系统的搭建增加了开发者的工作负担。
最低0.47元/天 解锁文章
3403

被折叠的 条评论
为什么被折叠?



