内存专项测试问题发现:小米闻声第一版时自测发现,当连续识别时间过长超过半小时,界面列表滑动出现明显卡顿,重启应用后卡顿不复现。

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(栅格化)