Systrace

Systrace是一个系统级的性能检测工具,App开发者可以利用它完成一些深层次的性能检测。

初始化

Systrace的初始化有两种方式,下面笔者将分别进行介绍。

In DDMS

Systrace工具已经在DDMS中有集成了,打开DDMS可以找到启动Systrace的按钮,如图6.20所示。

Systrace - 图1 图6.20 启动Systrace

点击该按钮,弹出如图6.21所示的界面。

Systrace - 图2 图6.21 Systrace配置

这里主要使用默认配置,采集的数据可以在下面进行选择。同时,还可以设置采集的时间段。点击“OK”按钮后即可开始采集,由于Systrace抓取的信息非常多,因此这里只设置了5s的时间段。

数据采集完毕后,在保存路径下就会生成对应的trace.html文件,用浏览器打开后,如图6.22所示。

Systrace - 图3 图6.22 Systrace数据结果

数据量确实非常大,要查看这个页面,还是需要一些小技巧的。

  • 缩放:通过W、S可以控制页面的缩放。
  • 滑动:通过A、D可以对页面进行滑动。

如果开发者对快捷键不熟悉,可以查看Systrace的帮助,点击右上角的“?”即可,如图6.23所示。

Systrace - 图4 图6.23 Systrace操作方法

Systrace因为SDK版本的不同可能会有不同,但大体上还是类似的。如图6.24和图6.25所示,分别是r21版本的platform-tools生成的Systrace和r23版本生成的Systrace。

Systrace - 图5 图6.24 r21版本Systrace数据结果图

Systrace - 图6 图6.25 r23版本Systrace数据结果图

整个界面、信息排列都有一些不同,这里我们以最新的r23版本的Systrace为准。

In Command Line

DDMS工具中实际上也是调用的SDK工具中的Systrace命令,该命令在platform-tools目录下,如图6.26所示。

Systrace - 图7 图6.26 Systrace指令位置

在Android 4.3以上的系统中,只需要在该目录下,用Python运行如下所示的指令即可。

  1. $ python systrace.py --time=10 -o mytrace.html sched gfx view wm

命令行比DDMS中的优势在于可定制性强,通过不同的参数设置可以采集不同的数据。笔者建议当开发者熟悉了图形化界面抓取Systrace后,应该多尝试使用命令行抓取,以便更加灵活地使用Systrace。

Systrace指令的可配置参数非常多,笔者这里不详细展开,一般使用上面的配置即可(抓取Graphics、view和Window Manager数据)。详细的参数设置,开发者可以参考Android Developer网站,地址如下所示。

http://developer.android.com/intl/zh-cn/tools/help/systrace.html

In Source Code

除了上面介绍的两种使用Systrace的方法外,在Android 4.3之后,开发者可以使用SDK提供的Trace类来增加自定义的Trace Tag。在Android Developer官方网站上,Google给出了示例代码,如下所示。

  1. public void ProcessPeople() {
  2. Trace.beginSection("ProcessPeople");
  3. try {
  4. Trace.beginSection("Processing Jane");
  5. try {
  6. // code for Jane task...
  7. } finally {
  8. Trace.endSection(); // ends "Processing Jane"
  9. }
  10.  
  11. Trace.beginSection("Processing John");
  12. try {
  13. // code for John task...
  14. } finally {
  15. Trace.endSection(); // ends "Processing John"
  16. }
  17. } finally {
  18. Trace.endSection(); // ends "ProcessPeople"
  19. }
  20. }

通过上面的代码,可以在Systrace中增加对应的Tag,以便分析指定代码块的性能问题。这种方式虽然比较烦琐,但是对于准确定位细节问题还是非常有帮助的。