对于传统的60刷新率手机来说,每16ms会发出一个VSync信号,复制CPU/GPU放在缓存中的图像,再通知CPU/GPU计算下一帧要显示的内容,再把刚复制的图像显示在屏幕上,这就是一个屏幕刷新周期。而如果在16ms内没有计算完毕的话,该帧就无法展示,屏幕进入下一个刷新周期,就产生了所谓的掉帧现象。
1. 掉帧监控 监控掉帧现象时,我们可以使用下方的adb命令,具体可见参考.
adb shell dumpsys gfxinfo <packageName>
复制
该命令展示的信息比较完整,如下所示。
Applications Graphics Acceleration Info:
Uptime: 275941522 Realtime: 391854346
** Graphics info for pid 6887 [packageName] **
Stats since: 275926453465347ns
Total frames rendered: 523 // 本次共收集了523帧的信息
Janky frames: 26 (4.97%) // 有26帧的耗时超过16ms,掉帧率为4.97%
50th percentile: 5ms // 50%的帧耗时在5ms以内
90th percentile: 8ms
95th percentile: 16ms
99th percentile: 20ms
Number Missed Vsync: 0 // 垂直同步失败的帧
Number High input latency: 259 // 处理input时间超时的帧数
Number Slow UI thread: 1 // 因UI线程上的工作导致超时的帧数
Number Slow bitmap uploads: 0 // 因bitmap的加载耗时的帧数
Number Slow issue draw commands: 0 // 因绘制导致耗时的帧数
Number Frame deadline missed: 1
HISTOGRAM: 5ms=346

文章介绍了如何通过adb命令监控Android应用的掉帧情况,包括使用GPU渲染模式分析、CPUProfile分析性能瓶颈,以及提供了一系列优化措施,如缓存管理、onBindViewHolder优化、布局优化和测量优化等。
最低0.47元/天 解锁文章
2526

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



