Systrace 的使用
在性能分析中,Android 官方提供了一种方法 Systrace。Systrace 支持分析多个模块,比如帧率,是否丢帧。以及可以自定义测量代码。检测出代码执行时间。还有很多更高端的功能,目前也正在摸索中。
Systrace 生成 trace.html。通过分析 trace.html文件,就可以知道在哪里出现了性能问题。使用 SYstrace 生成 trace.html 有两种方式,一种是通过 python 脚本生成,还一种就是通过 Device Monitor
通过 python 脚本生成
使用的 python 脚本位于 Android 的 SDK目录下。默认位于 user/AppData/Local/Android/Sdk/platform-tools/systrace
。使用的脚本名为 systract.py
。
支持的 Python 版本为 2.7的版本。不支持3.X版本。在 cmd 窗口首先 cd 到脚本文件夹地址处。在 windows 下使用脚本命令。
python systrace.py -t 10 sched view am -a <package-name>
-t 10
的意思是检测10秒的记录。 sched
为记录 cpu 的信息。 view
为记录绘制流程这些。am
为ActivityManager。
这样就通过脚本在当前目录生成了 tract.html。使用 Chrome 浏览器打开。systract.py
命令的一般用法是:
systrace.py [options] [category1 [category2 ...]]
[options]
是一些命令参数,[category]
等是你想检测的模块,比如view代表view系统(包含绘制流程),am代表ActivityManager(包含Activity创建过程等);
通过脚本生成的时候,我这里出现了一个报错 No module named win32con
。还没有解决,应该是 python 库的问题。 所以我使用的是 DDMS 生成的 tract.html。
通过 Device Monitor 生成
首先需要找到 Device Monitor, Device Monitor 位于 sdK 路径下的 Sdk/tools/lib/monitor-x86_64
。 默认路径为 user/AppData/Local/Android/Sdk/tools/lib/monitor-x86_64
。 打开 monitor.exe
即可。 在打开的时候需要关闭 Android Studio。否则会导致端口被占报错。
打开后选择设备的应用进程,然后点击设备下工具栏的倒数第二个选型。如图所示。
打开之后,会有不同的选项。第一个是 将 trace.html
保存的位置。 第二个是检测多少秒的记录。第三个选项是选择记录的进程。 第四个选项就是选择需要记录的哪些模块。如图。
点击确定时候,然后开始操作你想要检测的界面。同时,可以加入代码单独记录你想要检测的地方。
Trace.beginSection("gogoin");
Trace.endSection();
两者相互对应,有一个 begin 就需要一个 end。 同时两者需要在同一个线程处理。
生成 tract.html 之后,可以进行分析。
红箭头指向字符 F 的地方为丢帧的地方,绿色表示帧率正常,每帧控制在 16ms 。黄色表示轻微丢帧,红色表示丢帧严重。可以点击红色处,然后会出现耗时警告,耗时时长。
箭头指向的紫色部分则表示我们使用代码 Trace.beginSection("gogoin");
的结果。它的耗时表明了我们在代码开始 begin 到 end 经历的时间。 还有一些其他的过程耗时,都可以通过点击来查看。
其他
Trace.html 还有很多分析的地方。需要之后继续学习,补充该文档。