测试与性能
测试与性能 · androidx.test
Tracing:性能埋点
Trace.beginSection/endSection 埋点,配合 systrace 与 Perfetto 分析性能。
最后更新 2026-08-01
复制即用
import androidx.tracing.trace
fun loadList() {
trace("LoadList") {
// 需要分析的代码
fetchData()
render()
}
}或者手动 begin/end:
import androidx.tracing.Trace
Trace.beginSection("ParseResponse")
try {
parse()
} finally {
Trace.endSection()
}埋点规范
| 做法 | 说明 |
|---|---|
trace("Name") { ... } | 代码块埋点,自动配对 |
Trace.beginSection/endSection | 手动配对,用 try/finally |
Trace.beginAsyncSection/endAsyncSection | 跨线程/跨函数异步埋点(配唯一 id) |
systrace -a 包名 | 按包名过滤抓取 |
| Perfetto | 现代分析工具,可看长时段 |
常见陷阱
- begin 了不 end:section 嵌套错乱,抓取结果不可读。
- 每帧埋点:高频循环里别每帧调用。
- 生产常驻埋点:用条件编译(BuildConfig.DEBUG)控制。
- 异步埋点用错 API:跨线程场景用 async 版本,普通 begin/end 不匹配。
要点
trace("名称") { ... }在代码块执行期间记录一个 trace section。- 数据可通过
systrace(python systrace.py -a 你的包名)或 Perfetto 抓取分析。 - 必须成对使用
beginSection/endSection,用try/finally保证配对。 - 埋点本身开销极小,但不要在高频循环里每帧调用。
- 生产环境建议用条件编译控制是否埋点。