技术复核(2026-10-13):本文原写于 2015 年。Systrace 的事件时间线仍有参考价值,Eclipse / Device Monitor 入口已过期;旧脚本参数以下文核对的 AOSP
android-5.0.0_r1为准。新增命令以 Android 11 / API 30 及以上的 Perfetto 为例,旧系统差异另列。后续文章见 Android Perfetto 系列目录。
| 旧流程 | 现在的对应方式 |
|---|---|
| Eclipse / Device Monitor 的 Systrace 按钮 | Android 9 / API 28 起可用设备端 System Tracing;也可通过 ADB 采集 |
systrace.py 调用 atrace 并生成 HTML |
Perfetto 采集命令生成二进制 trace;具体事件由类别或配置文件决定 |
| 浏览器直接打开旧 HTML | 使用 Perfetto UI 导入 trace,也可用 Trace Processor 做 SQL 分析 |
| 把 user 构建理解为不能采集 | user 构建可以采集系统 trace;可见数据取决于系统、数据源、应用配置与厂商策略 |
本文是Android性能优化工具系列的第一篇,这个系列主要介绍Android性能优化过程中会使用到的一些工具,以及如何用这些工具来发现问题和解决问题。在性能优化方面,Android有不少性能工具供大家来使用,按照我们一贯地 “发现问题-解决问题”的思路来看,发现问题才是最主要的,一上来就想着如何去解决问题,反而会事倍功半。
这一篇先来简单介绍一下Systrace这个工具。
Systrace 简单介绍
Systrace 随 Android 4.1 / SDK Tools R20 推出,是系统事件跟踪与可视化工具。它把 CPU 调度、SurfaceFlinger、WindowManager、View 等已启用的事件放到同一条时间线上,帮助开发者寻找系统行为之间的关系。它不会自动采样每一个 Java 方法,也不等于完整调用栈分析器。当年的 SDK Tools R20 公告
旧流程主要由三部分组成:
- 内核事件:依赖内核已启用的 ftrace 功能和可访问的事件。调度、I/O、频率等类别的可用性要在设备上确认。
- 用户态标记与采集:系统组件通过 ATrace 写入标记,
atrace配置类别并读取跟踪数据。应用添加自己的区间可使用android.os.Trace.beginSection()/endSection();这组公开 API 从 Android 4.3 / API 18 才提供,不是从 Android 4.1 就能直接调用。 - 主机端报告:旧
systrace.py通过 ADB 调用设备的 atrace,处理数据并生成带查看器的 HTML。采集已有系统事件不要求先修改应用代码;只有自定义业务区间需要相应埋点。
当前 Perfetto 还能接入更多数据源,不能把它的全部功能概括为 ftrace 封装。android.os.Trace 的标记仍可被 Perfetto 读取,接口说明见 Trace 和 Perfetto ATrace 文档。