TraceView 是一个用来查看应用执行日志的图形工具.
通过它,我们可以直观地查看应用代码是如何随时间执行的,以及每个方法的执行时间和调用堆栈等信息。Traceview工具可以帮助我们跟踪应用代码中的性能问题.
要使用Traceview工具,你需要生成包含你想要分析的跟踪信息的日志文件。生成跟踪日志有两种方法:
在使用DDMS生成跟踪日志之前,需要做一些准备工作:
然后,启动Android Device Monitor。有两种方法:
如下图所示:
确保你的设备和应用显示在Devices选项卡中。在 Devices 选项卡中,选中你的应用,然后点击启动方法跟踪按钮 ,打开方法跟踪配置对话框。如下图所示:
方法跟踪配置对话框中有两种选项:
选择合适的方法跟踪模式之后,点击OK,开始记录跟踪日志。开始记录跟踪日志之后,在应用需要跟踪的地方执行交互操作。
最后,在 Devices 选项卡中,点击停止方法跟踪按钮 ,停止记录跟踪日志。稍等片刻,Android Device Monitor将自动加载生成的跟踪日志到Traceview工具中。
要创建跟踪日志文件,你需要调用Debug.startMethodTracing()静态方法。你可以为系统生成的跟踪日志文件指定一个名字。要停止跟踪,你需要调用Debug.stopMethodTracing()静态方法。例如,你可以在Activity的onCreate()方法中调用startMethodTracing()方法,在onDestroy()方法中调用stopMethodTracing()方法。示例代码如下所示:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// start tracing to "/sdcard/MainActivity.trace"
Debug.startMethodTracing("MainActivity");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onDestroy() {
super.onDestroy();
// stop tracing
Debug.stopMethodTracing();
}
}
注意: 应用必须具有写外部存储的权限。
启用方法跟踪会对应用代码的运行造成一定的影响,所以不要试图从跟踪日志中得到绝对的时间信息。当与其它的跟踪日志对比时,时间才是有用的。所以,你可以对比先前的跟踪日志来判断更改是否使得代码运行的更快或者更慢。
在Android 4.4及以上版本中,你可以使用基于采样的跟踪模式来减少运行时性能影响。要启用采样跟踪,你需要调用Debug.startMethodTracingSampling()静态方法并指定合适的采样间隔。然后,系统将定期收集跟踪日志,直到调用Debug.stopMethodTracing()静态方法停止跟踪。
在应用生成跟踪日志文件之后,你需要将该文件复制到计算机中。你可以使用 adb pull 命令来复制文件。示例如下所示:
adb pull /sdcard/MainActivity.trace./
最后,在Android Device Monitor中,点击 File > Open File… 来加载跟踪日志文件。
Traceview工具加载跟踪日志文件完毕之后如下图所示:
可以看到,Traceview工具有两个面板:
Timeline面板可视化了你的代码如何随时间执行。如下图所示:
Timeline面板的X轴表示时间,Y轴表示线程:
Timeline面板有几个常用的操作:
Profile面板显示了所有方法的列表。如下图所示:
Profile面板提供了方法调用花费的时间的概要:
Profile面板的列的具体说明如下表所示:
列 | 说明 |
---|---|
Name | 方法名 |
Inclusive Time | 方法调用自身花费的时间加上所有子方法调用花费的时间 |
Exclusive Time | 方法调用自身花费的时间,不包括子方法调用花费的时间 |
Calls+RecurCalls/Total | 方法调用的次数+递归调用的次数/总的方法调用次数 |
Time/Call | 单次方法调用花费的平均时间 |
根据Traceview工具显示的方法调用时间和调用次数,我们可以分析应用的性能问题。常用的分析思路如下:
Traceview是一个用来查看应用执行日志的图形化工具。通过它,我们可以直观地查看应用代码是如何随时间执行的,以及每个方法的执行时间和调用堆栈等信息。Traceview工具可以帮助我们跟踪应用代码中的性能问题。