lightbulb_outline Please take our October 2018 developer survey. Start survey

设置您的应用生成跟踪日志

要生成应用执行的函数跟踪,可使用 Debug 类设置您的应用。 通过这种方式设置应用,可让您更精确地控制设备何时开始和停止记录跟踪信息。 同时,设备还能使用您指定的名称保存跟踪日志,便于您日后轻松识别各个日志文件。 您可以使用 Android Studio 或 Traceview 查看各个跟踪日志。

另一种无需设置应用代码即可跟踪应用的方法是,利用 Android Studio 的 CPU Profiler 来开始和停止函数跟踪。 要了解详情,请参阅使用 CPU Profiler 查看 CPU Activity 和函数跟踪

在开始生成跟踪日志之前,请确保您的应用有权限写入外部存储(WRITE_EXTERNAL_STORAGE),以便将跟踪日志保存至该设备。

设置您的应用

要创建跟踪日志,将在您希望系统开始记录跟踪数据的位置调用 startMethodTracing()

在调用中,您可以指定 .trace 文件的名称,系统会将它保存到一个特定于软件包的目录中,该目录专门用于保存目标设备上的永久性应用数据,与 getExternalFilesDir() 返回的目录相同,在大多数设备上都位于 ~/sdcard/ 目录中。 该文件包含二进制函数跟踪数据,以及一份包含线程和函数名称的映射表。 要停止跟踪,请调用 stopMethodTracing()

以下示例开始和停止记录一个名为 sample.trace 的跟踪日志:

// Starts recording a trace log with the name you provide. For example, the
// following code tells the system to start recording a .trace file to the
// device with the name "sample.trace".
Debug.startMethodTracing("sample");
...
// The system begins buffering the generated trace data, until your
// application calls stopMethodTracing(), at which time it writes
// the buffered data to the output file.
Debug.stopMethodTracing();

请注意,如果您的应用在未更改跟踪日志名称的情况下再次调用 startMethodTracing(),则会覆盖已保存至设备的现有日志。 要了解如何动态更改各个跟踪日志的名称,请前往阅读保存多个日志部分。

如果系统在您调用 stopMethodTracing() 之前达到最大缓冲值,则会停止跟踪并向管理中心发送通知。 开始和停止跟踪的函数在您的整个应用流程内均有效。 也就是说,您可以在 Activity 的 onCreate(Bundle) 函数中调用 startMethodTracing(),在 Activity 的 onDestroy() 函数中调用 stopMethodTracing()

请注意,启用分析功能时,应用的运行速度会减慢。 也就是说,您不应使用分析数据来确定绝对时间(例如“函数 foo() 需要 2.5 秒才能运行”)。 跟踪日志中的时间信息只适用于与之前的跟踪日志进行对比,以便了解最近的更改是否加快或减慢了应用的运行速度。

部署到运行 Android 5.0(API 级别 21)及更高版本的设备时,您可以使用基于样本的分析方式进行分析,以减少分析对运行时性能的影响。 要启用样本分析,请调用带有指定抽样间隔时间的 startMethodTracingSampling()(而不是调用 startMethodTracing())。 系统会定期收集样本,直至您的应用调用 stopMethodTracing()

保存多个日志

如果您的应用多次在未指定新的跟踪日志名称的情况下开始和停止函数跟踪,设备将用新的跟踪日志覆盖之前的跟踪日志,即只会保留最近的跟踪日志。 要在设备上保存多个跟踪日志,应在您的应用每次调用 startMethodTracing() 时进行动态重命名。 以下示例使用 SimpleDateFormat 类在命名每个跟踪日志时包含当前的日期和时间。

// Uses the SimpleDateFormat class to create a String with
// the current date and time.
SimpleDateFormat date =
        new SimpleDateFormat("dd_MM_yyyy_hh_mm_ss");
String logDate = date.format(new Date());
// Applies the date and time to the name of the trace log.
Debug.startMethodTracing(
        "sample-" + logDate);

访问设备上的跟踪日志

系统在您的设备上创建跟踪日志后,可通过以下任一方式访问日志文件:

  • 使用设备文件浏览器。 要打开设备文件浏览器,请点击 View > Tool Windows > Device File Explorer(或点击工具窗口栏中的 Device File Explorer 按钮)。 如图 1 所示,您可以前往应用的软件包特定目录找到 .trace 文件。

    图 1. 利用设备文件浏览器查找跟踪日志。

    • 要在 IDE 的编辑器窗口中快速查看跟踪日志,请双击日志文件,如图 2 所示。 您也可以右键点击该文件,将其保存到本地磁盘,然后使用 Traceview 查看详细信息,例如父函数和子函数、每个函数调用的平均执行时间,以及实时 CPU 对比数据。 如果您没有看到日志文件,请右键点击您预期会出现此文件的目录,并选择Synchronize

      图 2. 在 Android Studio 中查看 .trace 文件。

  • 使用 adb pull 命令将文件复制到本地机器。 以下命令可将名为 sample.trace 的跟踪日志从设备复制到本地机器的 ~/Documents/trace-logs/ 目录。 您随后便可使用 Traceview 查看 .trace 文件。

    adb pull path-on-device/sample.trace ~/Documents/trace-logs/