获取首帧耗时的方式

「应用首帧耗时」的四类完整获取方式

  • 代码埋点法(Choreographer、FrameMetrics)
  • logcat 抓取法(系统日志观察)
  • SystemTrace 方式(Android Studio 自带)
  • Perfetto 方式(Android 官方推荐)

一、代码埋点法(运行时统计)

方法一:Choreographer + onWindowFocusChanged(常用)

  • 起点:Application.attachBaseContext();
  • 终点:Activity.onWindowFocusChanged(true) + Choreographer.postFrameCallback;
  • 用于业务埋点、自动追踪系统冷启动。
1
2
3
4
Choreographer.getInstance().postFrameCallback {
val cost = SystemClock.elapsedRealtime() - LaunchTimeMonitor.startTime
Log.d("LaunchTime", "首帧耗时: \${cost}ms")
}

方法二:FrameMetrics(高精度)

  • 起点:Application.attachBaseContext();
  • 终点:首帧 FrameMetrics.TOTAL_DURATION;
  • 适合调试使用,记录每一帧耗时(API 24+)。
1
2
3
4
window\.addOnFrameMetricsAvailableListener({ \_, metrics, \_ ->
val totalNs = metrics.getMetric(FrameMetrics.TOTAL\_DURATION)
Log.d("Launch", "首帧耗时: \${totalNs / 1\_000\_000}ms")
}, Handler(Looper.getMainLooper()))

二、Logcat 抓取法(无需修改代码)

系统在启动 Activity 时,logcat 中会输出如下日志:

1
ActivityTaskManager: Displayed com.xxx/.MainActivity: 1834ms

特点:

内容
Displayed 表示 Activity 首帧完成
1834ms 是系统从启动进程 ➜ 到首帧渲染完成的估算时间
来源 AMS(ActivityManagerService)日志
命令 `adb logcat

示例命令:

1
adb logcat | grep Displayed

三、System Trace(Android Studio)

操作步骤:

  1. 打开 Android Studio;
  2. Profiler > CPU > System Trace;
  3. 点击 App 图标,观察 timeline;
  4. 找到 “MainThread”、”ActivityThread”、”Choreographer#doFrame”、”Displayed” 等标记;
  5. 查看首个 Activity 的创建 → 绘制 → 渲染提交全过程。

优势:

  • 精度高;
  • 可分析 measure/layout/draw 各阶段;
  • 支持启动过程全链路可视化。

四、Perfetto(Google 官方推荐)

简介:

Perfetto 是 Android 10+ 的官方高性能追踪工具,能精准展示:

  • 应用启动全链路;
  • 首帧时间;
  • View 渲染耗时;
  • Binder 调用;
  • GPU 合成与提交时间。

使用方式:

1. 打开 Perfetto UI 工具:

2. 开启命令行抓取:

1
2
adb shell perfetto -o /data/misc/perfetto-traces/trace.pb \
--txt -c /data/misc/perfetto-configs/startup_config.txt

或者用 Android Studio → Device Explorer > Perfetto 抓取。

3. 导入 trace 文件,搜索:

  • “launching: com.xxx”
  • “Displayed”
  • “SurfaceFlinger”
  • “Choreographer#doFrame”

优势:

  • 系统级分析启动过程;
  • 区分应用进程启动耗时、UI 绘制耗时;
  • 可关联 CPU、GPU、内存等指标。

最终对比总结表

方式 精度 实时性 适用场景 是否修改代码
Choreographer 埋点上报
FrameMetrics 调试分析
Logcat: Displayed 快速验证
SystemTrace 开发调优
Perfetto 极高 系统分析

推荐组合策略

场景 推荐方式
生产环境 Choreographer 埋点 + LaunchTimeMonitor
开发调试 FrameMetrics + SystemTrace
系统排查 Perfetto
日常测试 `adb logcat

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器