Android Profiler
问题
Android Studio Profiler 提供了哪些性能分析能力?如何使用?
答案
Profiler 四大模块
| 模块 | 功能 | 典型用途 |
|---|---|---|
| CPU Profiler | 方法调用追踪、火焰图 | 定位耗时方法 |
| Memory Profiler | 堆内存、分配追踪、GC | 内存泄漏排查 |
| Network Profiler | 网络请求时间线 | 请求瀑布图、数据量分析 |
| Energy Profiler | 电量消耗估算 | WakeLock、GPS、网络唤醒 |
CPU Profiler
录制方式选择:
| 方式 | 说明 | 适用场景 |
|---|---|---|
| Sample Java/Kotlin | 采样(低开销) | 常规性能分析 |
| Trace Java/Kotlin | 逐方法跟踪(高开销) | 精确调用时序 |
| Sample C/C++ | Native 层采样 | NDK 性能分析 |
| System Trace | 系统级追踪 | 帧率、调度分析 |
Memory Profiler
关键功能:
- 堆转储(Heap Dump):查看当前所有存活的对象
- 分配追踪(Allocation Tracking):记录对象分配的调用栈
- GC 事件:Timeline 上标记每次 GC
// 手动触发堆转储用于分析
Debug.dumpHprofData("/sdcard/heap.hprof")
命令行替代工具
# CPU 分析
adb shell simpleperf record -p <pid> -g --duration 10
adb shell simpleperf report
# 内存分析
adb shell dumpsys meminfo <package>
# 网络分析
adb shell dumpsys connectivity
常见面试问题
Q1: 如何用 Memory Profiler 排查内存泄漏?
答案:
- 操作可能泄漏的页面(如打开关闭 Activity 几次)
- 手动触发 GC
- 抓取 Heap Dump
- 在 Heap Dump 中搜索 Activity 类名
- 如果关闭的 Activity 仍有实例存在,查看其 GC Root 引用链
Q2: CPU Profiler 的火焰图怎么看?
答案:
- 横轴:占用时间比例(越宽越耗时)
- 纵轴:调用栈深度(越高调用越深)
- 颜色无特殊含义,仅区分不同方法
- 重点关注:宽且出现在栈底的方法,即耗时最多的入口