Traceview 已弃用。如果您使用的是 Android Studio 3.2 或更高版本,应改为使用 CPU 性能剖析器来执行以下操作:检查通过使用 Debug 类检测应用而捕获的 .trace 文件,记录新方法跟踪记录,保存 .trace 文件,以及检查应用进程的实时 CPU 使用情况。

Traceview 这款工具能够以图形的形式显示跟踪日志。您可以通过使用 Debug 类检测代码以生成此类日志。这种跟踪方法非常精确,因为您可以指定需在代码中开始和停止记录跟踪数据的确切位置。如果您尚未生成此类跟踪日志并将其从连接的设备保存到本地计算机,请转到通过检测您的应用生成跟踪日志。使用 Traceview 检查此类日志有助于您调试应用并剖析其性能。

提示:您可以从命令行使用 dmtracedump 生成跟踪日志文件的图形化调用堆栈图。

如果您不需要查看通过使用 CPU 性能剖析器检查应用的线程并记录方法跟踪记录。

使用 Traceview 打开跟踪日志

如需通过 Android Studio 中的 Traceview 打开跟踪日志,请按以下步骤操作:在 Android Device Monitor 中,依次选择 File > Open File。

转到您要检查的 .trace 文件。

点击 Open。

注意:如果您尝试查看在启用了代码缩减的情况下构建的应用(如发布 build)的跟踪日志,某些方法和成员名称可能会被混淆处理。您可以使用 ProGuard mapping.txt 文件查明未经混淆的原始名称。如需详细了解此文件,请参阅解码经过混淆的堆栈轨迹。

注意:从命令行运行 traceview 的功能已弃用。

Traceview 概览

打开跟踪日志后,Traceview 会使用以下两个窗格显示日志数据:

时间轴窗格,说明每个线程何时进入和退出某个方法

剖析窗格,总结每个线程在跟踪日志期间的执行情况

以下各部分进一步介绍了 Traceview 的输出窗格。

时间轴窗格

图 1 显示了时间轴窗格的特写。每个线程的执行情况都显示在各自的行中,并且越往右使用的时间越长。每个方法都以不同的颜色显示。第一行下面的细线显示所选方法的子级(从进入到退出)。

android 试试跟踪 安卓应用跟踪_命令行

图 1.

Traceview 时间轴窗格。

剖析窗格

如图 2 所示,剖析窗格列出了跟踪日志期间执行的各个方法以及执行这些方法所用的时间。调用另一个方法的方法称为父级,父级调用的方法称为其子级。当您通过点击某个方法以选择该方法时,它会在两个单独的节点下同时显示其父级和子级。

对于每个方法(顶级节点),该表会显示其非独占时间和独占时间(以毫秒为单位)以及占总时间的百分比。独占时间是执行方法自身代码所用的时间,而非独占时间则是执行方法自身代码所用时间与执行其子级代码所用时间之和。系统还会根据 CPU 时间和实际时间报告用时信息。CPU 时间仅考虑线程主动使用 CPU 的时间,而实际时间则提供从应用进入方法到退出该方法这整个过程(无论线程处于活动状态还是休眠状态)的绝对用时信息。

对于剖析窗格中的每个顶级节点,表中的 Calls + Rec, Calls/Total 列(图 2 中未显示)会报告对相应方法的调用次数和递归调用的次数。而对于父方法和子方法,此列会显示被调用方法为顶级节点中方法的子级或父级的调用次数。

android 试试跟踪 安卓应用跟踪_android tracelog分析_02

图 2. Traceview 分析窗格。

Traceview 已知问题

TraceView 日志记录无法很好地处理线程,从而导致出现以下问题:

如果线程在分析期间退出,不会发出线程名称(在 Android 5.1 及更高版本中已解决此问题);

虚拟机会重复使用线程 ID。如果在一个线程停止时另一线程开始,这两个线程可能会获得同一 ID。