内存专项测试问题发现:小米闻声第一版时自测发现,当连续识别时间过长超过半小时,界面列表滑动出现明显卡顿,重启应用后卡顿不复现。
1、问题定位
卡顿分析工具:
1、开发者选项-GPU呈现模式分析(或者叫HWUI呈现模式分析)
参考资料:
https://developer.android.com/studio/profile/inspect-gpu-rendering?hl=zh-cn
https://developer.android.com/topic/performance/rendering/profile-gpu
开发者选项开启GPU呈现分析,卡顿产生后可以明显看出来,每个竖条表示一帧渲染时间,很多都超过了水平线16ms,正常流畅情况下是如下图这样的
以上这个图只能帮助我们大概定位卡顿的位置,为绿色部分。根据google开发文档
深蓝区域为绘制流程,往前一个浅绿区域为测量/布局流程,再往前为动画流程。这个工具并不能帮助我们定位到具体的代码段。只是大致的一个范围
2、Android Studio工具CPU Profiler
参考资料:https://developer.android.google.cn/studio/profile/cpu-profiler
2、原理分析
2.1 Android刷新机制
参考资料:
http://hukai.me/android-performance-patterns/
http://hukai.me/android-performance-render/
https://www.cnblogs.com/dasusu/p/8311324.html
http://gityuan.com/2017/02/25/choreographer/
VSYN
Refresh rate:一秒内刷新屏幕次数
Frame rate:gpu一秒内操作的帧数
卡顿原因:大部分屏幕刷新率时60Hz,如果1000/60=16.67ms内没办法处理一帧任务,那么就会发生丢帧,也就是卡顿。
cpu负责Measure、Layout、Record、Excecute的计算操作,GPU负责rasterization(栅格化)