
CPU Profiler
在 Android 性能优化中,CPU 是应用流畅度的"心脏"------UI 卡顿、响应慢、耗电快,往往都和 CPU 资源被不合理占用有关。
而 Android Studio 的 CPU Profiler,正是帮我们"透视"CPU 运行细节的核心工具。今天我们聚焦 CPU Profiler 的基础:线程视图 与方法耗时定位,教你从"看到 CPU 使用率"到"找到具体耗时代码"。
CPU Profiler 能看什么?
打开 CPU Profiler(View > Tool Windows > Profiler,选择应用进程后点击"CPU"标签),你会看到两个核心区域:
- 时间轴区域:实时显示 CPU 总使用率、应用进程的 CPU 占比。
- 线程视图区域:展示应用所有线程的状态变化(运行、休眠、等待等)。
第一步:线程视图------先搞懂"谁在占用 CPU"
线程是 CPU 调度的基本单位,应用的所有代码都是在线程 中执行的。线程视图的核心价值,是帮你快速定位"哪个线程在消耗 CPU"。

线程视图的关键信息:
-
线程状态:
- Running(绿色):线程正在执行代码,占用 CPU。
- Sleeping (蓝色):线程休眠(比如
Thread.sleep()),不占用 CPU。 - Waiting(黄色):线程等待资源(比如锁、I/O),不占用 CPU。
- Dead(灰色):线程已销毁。
-
线程排序:新版 Profiler 会自动把**活跃线程(Running 时间长)**排到前面,不用手动找。

实战:用线程视图定位"卡顿线程"
比如滑动页面时卡顿,你可以:
- 操作应用触发卡顿,同时观察 CPU 时间轴(使用率会突然飙升)。
- 看线程视图:找到 "main"线程(UI 线程),如果它的"Running"状态占比很高,说明卡顿是 UI 线程被耗时操作阻塞导致的。
第二步:方法耗时定位------找到"具体哪行代码慢"
知道了"哪个线程耗时",下一步是找到线程里的耗时方法 。CPU Profiler 提供了两种核心方式:采样(Sample)和插桩(Instrumented)。
方式 1:采样(Sample)------低开销的"快速排查"
原理:
定时(默认 10ms)"快照"线程的调用栈,统计方法出现在调用栈中的次数,从而估算方法的 CPU 占用时间。
操作步骤:
- 在 CPU Profiler 中选择"Sample Java Methods"。
- 点击"Record",操作应用(比如触发卡顿),再点击"Stop"。
核心视图:
-
Flame Chart(火焰图):
- 横向是方法的执行时间占比(越长越耗时)。
- 纵向是调用栈(上层是被调用者,下层是调用者)。
- 比如看到一个占比很高的方法
com.example.MyClass.heavyTask(),就是它在消耗 CPU。
-
Top Down(自上而下):
- 从调用栈的顶层(比如
main方法)往下展开,显示每个方法的总耗时(包括子方法的耗时)。
- 从调用栈的顶层(比如
方式 2:插桩(Instrumented)------高精度的"精确分析"
原理:
在方法的"进入"和"退出"时插入代码,精确记录每个方法的执行时间(包括方法的入参、返回值)。
操作步骤:
- 选择"Instrument Java Methods"。
- 同样记录操作,停止后查看报告。
核心视图:
- Bottom Up(自下而上) :
- 从耗时最长的方法往上展开,显示方法被哪些上级方法调用。
- 适合定位"被频繁调用的小方法"(比如循环里的方法,单次耗时短但总耗时高)。
两种方式怎么选?
| 方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 采样(Sample) | 性能开销小,可长时间记录 | 精度略低 | 快速定位"大的耗时方法" |
| 插桩(Instrumented) | 精度极高,能看方法参数 | 性能开销大(拖慢应用) | 精确分析"小方法的耗时细节" |
总结
CPU 优化的本质,是减少线程在"Running"状态的不必要耗时:
- 先通过线程视图找到"耗 CPU 的线程";
- 再通过采样/插桩定位"线程里的耗时方法";
- 最后优化方法(比如异步、算法优化)。
