您的位置:首页 > 移动开发 > Android开发

Android性能优化工具之Systrace

2017-10-04 23:56 344 查看

前言

在开发应用时,你需要检查应用的交互是平滑流畅的。Systrace工具可以帮助你收集设备上运行的所有进程的时间信息,并生成一个详细的HTML报告。它显示了给定时间内CPU的使用情况以及每个进程和线程在做什么。它还自动分析了捕获的跟踪信息,并高亮显示它所观察到的性能问题,同时提供了如何修复问题的建议。Systrace工具特别适合用来分析UI的性能。

前提条件

使用Systrace工具有几个前提条件:

Android SDK Tools版本不低于20。

Android设备的系统版本不低于4.1。

如果使用命令行运行,计算机需要安装Python。

准备工作

使用Systrace工具之前,需要做一些准备工作:

将设备连接到计算机。

开启设备的 开发者选项USB调试USB安装

在设备上运行待跟踪的应用。

使用Systrace

Systrace工具可以从图形用户界面运行,也可以从命令行运行。

使用图形用户界面运行

Systrace工具内置在Android Device Monitor中。启动Android Device Monitor有两种方法:

在Android Studio中,点击 Tools > Android > Android Device Monitor

进入Android SDK根目录下的 tools 目录,运行 monitor 程序。

如下图所示:



确保你的设备和应用显示在Devices选项卡中。在 Devices 选项卡中,选中你的设备,然后点击Systrace按钮

,打开Systrace工具的配置对话框。如下图所示:



Systrace工具的配置对话框的各个设置项的说明如下表所示:

设置项说明
Destination Filetrace文件的保存位置
Trace duration (seconds)trace的时长
Trace Buffer Size (kb)trace的缓存大小
Enable Application Traces from使能应用等级的trace
Commonly Used Tags常用的trace选项
Advanced Options高级的trace选项
注意: 当你在应用代码中使用Trace类添加自己的跟踪标记时,Enable Application Traces from设置项需要设置为你的应用包名。即使你没有在应用代码中添加自己的跟踪标记,你也应该设置Enable Application Traces from设置项的值为你的应用包名。因为默认情况下,许多库(比如RecyclerView)的代码里添加了可以提供有用信息的跟踪标记。

最后,点击OK,Systrace工具开始跟踪。开始跟踪之后,在应用需要跟踪的页面进行交互操作。

使用命令行运行

使用命令行运行Systrace工具必须先安装Python,并将其添加到系统的PATH环境变量中。

使用命令行运行Systrace工具的语法如下所示:

$ python systrace.py [options] [category1] [category2] ... [categoryN]


对于Android 4.3及以上版本的设备和Android 4.2及以下版本的设备,Systrace工具有不同的命令行选项,具体内容可以参考官网。

Android 4.3及以上版本的设备

在Android 4.3及以上版本的设备上使用Systrace工具时,你可以省略跟踪类别标签来获得默认值,或者你可以手动指定包含的标签。示例如下所示:

$ cd android-sdk/platform-tools/systrace
$ python systrace.py -o trace.html --time=10 --app=com.github.cyc.study sched gfx view wm


Android 4.2及以下版本的设备

在Android 4.2及以下版本的设备上使用Systrace工具需要两个步骤。你必须首先设置要捕获的跟踪标签,然后运行跟踪。示例如下所示:

$ cd android-sdk/platform-tools/systrace
$ python systrace.py --set-tags gfx,view,wm
$ adb shell stop
$ adb shell start
$ python systrace.py -o trace.html --time=10


Trace应用代码

Android系统默认添加的跟踪标记无法跟踪应用的所有行为。你可以根据需要在应用代码里添加自定义的标记。在Android 4.3 (API level 18) 及以上版本中,你可以使用 Trace 类在应用代码中添加标记。

使用 Trace.beginSection() 静态方法来标记一次跟踪的开始,使用 Trace.endSection() 静态方法来标记一次跟踪的结束。示例代码如下所示:

private void doTask() {
if (Build.VERSION.SDK_INT >= 18) {
Trace.beginSection("MainActivity.doTask()");
}

// 模拟执行任务
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}

if (Build.VERSION.SDK_INT >= 18) {
Trace.endSection();
}
}


注意:

Trace.endSection()方法结束的是最近一次调用的Trace.beginSection()方法。因此,要确保开始和结束的方法调用是正确匹配的。

Trace.beginSection()和Trace.endSection()方法必须在同一个线程中调用。

在try…catch语句中,必须在finally块中调用Trace.endSection()方法,以确保即使抛出异常也会调用结束方法。

在使用Systrace工具之前需要使能应用等级的trace,否则Systrace工具无法跟踪在应用代码里添加的自定义标记。

分析Trace报告

Systrace工具跟踪结束之后会在指定目录下生成一个详细的HTML报告文件。该文件需要使用Google Chrome浏览器打开。打开之后,如下图所示:



Trace报告的X轴表示时间,Y轴以进程进行分组,进程组内是各个线程。每个应用进程包含了每个线程所包含的所有跟踪标记,包括基于启用跟踪类别的高级跟踪事件的层次结构。

Trace报告可以进行一些简单的交互,比如放大、缩小、平移和拖动等。下表列出了几个常用的快捷键:

快捷键描述
w放大时间轴
s缩小时间轴
a右移时间轴
d左移时间轴

查看帧

每个应用都显示了一排表示渲染帧的圆形,圆形的颜色通常是绿色的。颜色为黄色或者红色的圆形表示该帧超过了维持平滑流畅的60帧每秒所需的16.6毫秒的运行时间限制。如下图所示:



点击一个圆形会高亮显示它,此时可以只关注系统为该帧所做的工作。在Android 5.0 (API level 21) 及以上版本的设备上,这个工作是由UI线程和Render线程完成的。在以前的版本中,创建一个帧的所有工作都是在UI线程上完成的。

我们还可以单击一个帧的各个组件,看看它们分别运行了多长时间。有一些事件,比如performTraversals,当你选中它时下方会描述系统在该方法中做了什么。

查看警报

Systrace工具对跟踪中的事件进行自动分析,并将许多性能问题作为警报,警报中会提供如何修复问题的建议。当你选中一个慢帧时,下方会显示一个警报。如下图所示:



你还可以通过单击窗口右方的 Alerts 选项卡来查看Trace报告的所有警报。这样做会展开Alerts面板,在那里你可以看到Systrace工具在跟踪中发现的每一个警报,以及警报的总数。如下图所示:



总结

Systrace工具可以帮助你收集设备上运行的所有进程的时间信息,并生成一个详细的HTML报告。它显示了给定时间内CPU的使用情况以及每个进程和线程在做什么。它还自动分析了捕获的跟踪信息,并高亮显示它所观察到的性能问题,同时提供了如何修复问题的建议。Systrace工具特别适合用来分析UI的性能。

参考

https://developer.android.com/studio/profile/systrace.html

https://developer.android.com/studio/profile/systrace-walkthru.html

https://developer.android.com/studio/profile/systrace-commandline.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android