1. systrace工具
Systrace是分析Android性能问题的神器,Google IO 2017上更是对其各种强推. 是分析卡顿掉帧问题核心工具,只要能提供卡顿现场,systrace就能很好定位问题
原理
在介绍使用之前,先简单说明一下Systrace的原理:它的思想很朴素,在系统的一些关键链路(比如System Service,虚拟机,Binder驱动)插入一些信息(我这里称之为Label),通过Label的开始和结束来确定某个核心过程的执行时间,然后把这些Label信息收集起来得到系统关键路径的运行时间信息,进而得到整个系统的运行性能信息。Android Framework里面一些重要的模块都插入了Label信息(Java层的通过android.os.Trace类完成,native层通过ATrace宏完成),用户App中可以添加自定义的Label,这样就组成了一个完成的性能分析系统。另外说明的是:Systrace对系统版本有一个要求,就是需要Android 4.1以上。系统版本越高,Android Framework中添加的系统可用Label就越多,能够支持和分析的系统模块也就越多;因此,在可能的情况下,尽可能使用高版本的Android系统来进行分析
获取systrace文件
要想分析卡顿现场,必须先获取到卡顿现场的Systrace文件,获取Systrace文件的方式有两种,一种是通过AndroidSDK/tools
目录下,通过monitor.bat
用Android Device Monitor可视化工具得到,一种是通过python脚本获取,我本人更喜欢通过脚本获取,因为更方便一点。
1. 通过Android Device Monitor获取
(1)点击绿色按钮启动Systrace
(2)
(3)这里,我们仅仅抓取5秒钟的系统数据,没有选择特别的应用进程,抓取的内容为基础内容。
(4)点击OK开始抓取
2. 通过python脚本抓取(推荐)
(1)装python2.X版本,Systrace脚本不支持3.X版本。
(2)通过python脚本执行AndroidSDK\platform-tools\systrace\
目录下的systrace.py
文件
(3)可以配置一些参数,类似于通过Android Device Monitor抓取时步骤2配置的显示信息,若不选择则默认全
-
配置一些其他实用参数:
-o
: 指定文件输出位置和文件名-t
: 抓取systrace的时间长度-a
: 指定特殊进程包名(自己加Label时必须加上)
抓取脚本示例:
使用命令抓取
systrace:
python systrace.py -t 3 -b 30480 gfx input audio view video wm sm webview camera hal res database dalvik rs disk mmc