跳到主要内容

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

关键功能:

  1. 堆转储(Heap Dump):查看当前所有存活的对象
  2. 分配追踪(Allocation Tracking):记录对象分配的调用栈
  3. 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 排查内存泄漏?

答案

  1. 操作可能泄漏的页面(如打开关闭 Activity 几次)
  2. 手动触发 GC
  3. 抓取 Heap Dump
  4. 在 Heap Dump 中搜索 Activity 类名
  5. 如果关闭的 Activity 仍有实例存在,查看其 GC Root 引用链

Q2: CPU Profiler 的火焰图怎么看?

答案

  • 横轴:占用时间比例(越宽越耗时)
  • 纵轴:调用栈深度(越高调用越深)
  • 颜色无特殊含义,仅区分不同方法
  • 重点关注:宽且出现在栈底的方法,即耗时最多的入口

相关链接