安卓性能测试

安卓性能测试通常围绕 启动速度、流畅度、内存、CPU、功耗、网络、稳定性、安装包体积 等方面展开。可以分为 手工分析 + 自动化压测 + 线上监控 三部分。


一、性能测试关注哪些指标?

1. 启动性能

常见指标:

指标 说明
冷启动时间 App 进程不存在,从点击图标到首页可交互
热启动时间 App 已在后台,再次打开
温启动时间 进程存在但 Activity 被销毁
首帧时间 第一帧绘制出来的时间
可交互时间 用户真正可以操作的时间

常用命令:

adb shell am start -W 包名/启动Activity

示例:

adb shell am start -W com.example.demo/.MainActivity

输出中关注:

ThisTime: 500
TotalTime: 800
WaitTime: 850

一般更关注 TotalTime


2. 页面流畅度 / FPS / 卡顿

关注:

指标 说明
FPS 每秒帧数,理想接近 60 或 120
掉帧 没有在规定时间内完成绘制
卡顿 连续掉帧导致视觉不流畅
Jank Android 中对卡顿帧的描述

常用工具:

  • Android Studio Profiler
  • Perfetto
  • Systrace
  • SurfaceFlinger
  • FrameMetrics
  • 腾讯 Matrix
  • Android Vitals

常用命令:

adb shell dumpsys gfxinfo 包名

例如:

adb shell dumpsys gfxinfo com.example.demo

可以查看:

Janky frames
50th percentile
90th percentile
95th percentile
Number Missed Vsync

清空历史数据:

adb shell dumpsys gfxinfo 包名 reset

3. CPU 性能

关注:

指标 说明
CPU 使用率 App 是否长期占用过高 CPU
主线程耗时 UI 线程是否被阻塞
线程数量 是否存在异常线程增长
方法耗时 哪些方法执行慢

常用命令:

adb shell top

查看指定包:

adb shell top | grep 包名

或者:

adb shell pidof 包名
adb shell top -p PID

Android Studio Profiler 可以查看:

  • CPU Usage
  • Call Trace
  • Method Trace
  • System Trace

4. 内存性能

关注:

指标 说明
PSS 实际占用物理内存,更常用
Java Heap Java/Kotlin 对象内存
Native Heap C/C++、Bitmap、So 等占用
内存泄漏 Activity、Fragment、Context 未释放
GC 频率 频繁 GC 会造成卡顿
OOM 内存溢出崩溃

常用命令:

adb shell dumpsys meminfo 包名

示例:

adb shell dumpsys meminfo com.example.demo

重点关注:

TOTAL PSS
Native Heap
Dalvik Heap
Graphics

内存泄漏检测工具:

  • LeakCanary
  • Android Studio Memory Profiler
  • MAT
  • Perfetto

5. 功耗测试

关注:

指标 说明
CPU 唤醒 是否频繁唤醒
网络请求 是否后台频繁请求
GPS 是否持续定位
WakeLock 是否未释放
蓝牙 / Wi-Fi / 传感器 是否异常使用

常用工具:

  • Battery Historian
  • Android Studio Energy Profiler
  • Perfetto
  • 厂商功耗测试工具

命令:

adb shell dumpsys batterystats --reset

执行测试场景后:

adb bugreport bugreport.zip

然后用 Battery Historian 分析。


6. 网络性能

关注:

指标 说明
请求耗时 DNS、连接、SSL、首包、下载
请求成功率 是否有大量失败
流量消耗 是否有重复请求、大包传输
弱网表现 2G/3G/高延迟/丢包
缓存策略 是否合理使用缓存

常用工具:

  • Charles
  • Fiddler
  • Wireshark
  • Android Studio Network Profiler
  • OkHttp EventListener
  • Network Profiler

弱网模拟:

adb shell network delay

也可以使用:

  • Charles Throttle Settings
  • Clumsy
  • Linux tc
  • Android Emulator 网络设置

7. 稳定性测试

关注:

指标 说明
Crash 崩溃
ANR 应用无响应
OOM 内存溢出
黑白屏 页面无法正常展示
长时间运行异常 内存泄漏、线程泄漏、句柄泄漏

常用 Monkey:

adb shell monkey -p 包名 -v 10000

更完整示例:

adb shell monkey \
-p com.example.demo \
--throttle 300 \
--ignore-crashes \
--ignore-timeouts \
--ignore-security-exceptions \
-v -v -v 10000

查看崩溃日志:

adb logcat

或者:

adb logcat | grep -i "FATAL EXCEPTION"

ANR 日志:

adb shell ls /data/anr
adb shell cat /data/anr/traces.txt

二、常用性能测试工具

1. Android Studio Profiler

适合开发调试阶段使用。

可以分析:

  • CPU
  • Memory
  • Network
  • Energy

优点是使用简单、图形化。


2. Perfetto

Google 推荐的新一代性能分析工具,适合分析:

  • 启动耗时
  • 卡顿
  • CPU 调度
  • 线程阻塞
  • Binder 调用
  • I/O
  • Choreographer
  • SurfaceFlinger

官网:

https://ui.perfetto.dev/

常用流程:

adb shell perfetto -o /data/misc/perfetto-traces/trace_file.perfetto-trace -t 10s sched freq idle am wm gfx view binder_driver hal dalvik
adb pull /data/misc/perfetto-traces/trace_file.perfetto-trace

然后上传到 Perfetto UI 分析。


3. Systrace

老一些,但仍然常见。

用于分析:

  • UI 卡顿
  • CPU 调度
  • View 绘制
  • Input 延迟
  • GC

4. LeakCanary

用于检测内存泄漏。

集成后可以自动检测:

  • Activity 泄漏
  • Fragment 泄漏
  • ViewModel 泄漏
  • Context 泄漏

5. Matrix

腾讯开源性能监控框架。

可以监控:

  • 卡顿
  • 启动耗时
  • IO
  • SQLite
  • 内存
  • APK 体积

三、性能测试基本流程

第一步:确定测试目标

例如:

首页冷启动小于 1500ms
列表滑动 FPS 大于 55
页面切换无明显卡顿
内存峰值小于 300MB
Monkey 运行 8 小时无 Crash、ANR

第二步:准备测试环境

需要统一:

  • 手机型号
  • Android 系统版本
  • App 版本
  • 网络环境
  • 电量状态
  • 是否插电
  • 后台进程情况
  • 屏幕亮度
  • 测试账号和数据

建议:

adb shell pm clear 包名
adb shell am force-stop 包名

测试前尽量保持环境一致。


第三步:设计测试场景

常见场景:

  1. App 冷启动
  2. 登录流程
  3. 首页加载
  4. 列表滑动
  5. 图片浏览
  6. 视频播放
  7. 页面跳转
  8. 搜索
  9. 支付流程
  10. 后台切前台
  11. 长时间运行
  12. 弱网环境
  13. 大数据量场景

第四步:采集数据

可以通过:

  • adb 命令
  • Android Studio Profiler
  • Perfetto
  • 自动化脚本
  • 埋点日志
  • 线上性能平台

例如采集启动时间:

for i in {1..10}
do
  adb shell am force-stop com.example.demo
  adb shell am start -W com.example.demo/.MainActivity
  sleep 3
done

多测几次,去掉异常值,取平均值、P90、P95。


第五步:分析问题

常见分析方向:

启动慢

可能原因:

  • Application 初始化过多
  • 主线程做 I/O
  • 主线程网络请求
  • 初始化 SDK 太多
  • 首页布局复杂
  • 首屏接口慢
  • 冷启动加载资源过大

优化方向:

  • 延迟初始化
  • 异步初始化
  • 拆分启动任务
  • 启动器框架
  • 减少首屏布局层级
  • 使用懒加载
  • 减少主线程 I/O

页面卡顿

可能原因:

  • 主线程耗时任务
  • RecyclerView 绑定数据慢
  • 图片加载过大
  • 布局层级复杂
  • 频繁 GC
  • 过度绘制
  • 动画计算复杂

优化方向:

  • 主线程只做 UI 操作
  • DiffUtil 优化列表刷新
  • RecyclerView 复用优化
  • 图片压缩和缓存
  • ConstraintLayout 减少层级
  • 避免频繁创建对象
  • 减少 overdraw

内存过高

可能原因:

  • Bitmap 未释放或过大
  • Activity 泄漏
  • 静态变量持有 Context
  • Handler 延迟消息未清理
  • 注册监听未反注册
  • 缓存无限增长

优化方向:

  • 使用 LeakCanary
  • 图片按需加载
  • LruCache 限制缓存
  • 生命周期内释放资源
  • 避免静态持有 View/Context

四、常用 adb 命令汇总

查看启动时间

adb shell am start -W 包名/Activity名

查看内存

adb shell dumpsys meminfo 包名

查看 FPS 和卡顿

adb shell dumpsys gfxinfo 包名

查看 CPU

adb shell top

查看进程 PID

adb shell pidof 包名

查看电量统计

adb shell dumpsys batterystats

清除电量统计

adb shell dumpsys batterystats --reset

抓取日志

adb logcat

停止应用

adb shell am force-stop 包名

清除应用数据

adb shell pm clear 包名

Monkey 压测

adb shell monkey -p 包名 -v 10000

五、性能测试报告应该包含什么?

一份完整的性能测试报告建议包含:

  1. 测试背景
  2. 测试版本
  3. 测试设备
  4. Android 系统版本
  5. 网络环境
  6. 测试场景
  7. 测试方法
  8. 测试数据
  9. 对比基线
  10. 问题列表
  11. 复现步骤
  12. 日志或 trace 附件
  13. 优化建议
  14. 结论

示例:

场景 指标 结果 标准 是否通过
冷启动 TotalTime 1800ms <1500ms 不通过
首页滑动 FPS 52 >55 不通过
详情页 PSS 280MB <300MB 通过
Monkey 2小时 Crash 0 0 通过

六、推荐的性能测试落地方案

如果是团队项目,可以这样做:

开发阶段

  • Android Studio Profiler
  • LeakCanary
  • StrictMode
  • 本地启动耗时日志
  • 本地卡顿检测

测试阶段

  • adb 脚本采集启动、内存、FPS
  • Monkey 稳定性测试
  • 弱网测试
  • Perfetto 分析重点卡顿场景

发布前

  • 对比上一个版本性能数据
  • 启动时间、内存、FPS、Crash、ANR 必测
  • 多机型覆盖:低端机、中端机、高端机

线上阶段

  • 接入性能监控平台
  • 监控启动、卡顿、Crash、ANR、内存、网络
  • 按机型、系统版本、地区分析问题

七、简单总结

安卓性能测试可以按照下面这条主线做:

确定指标 → 设计场景 → 准备设备 → 执行测试 → 采集数据 → 分析瓶颈 → 输出报告 → 优化回归

重点关注:

启动是否快
页面是否流畅
内存是否稳定
CPU 是否异常
功耗是否过高
网络是否合理
长时间运行是否稳定

如果你刚开始做,建议先从这几个命令入手:

adb shell am start -W 包名/Activity
adb shell dumpsys meminfo 包名
adb shell dumpsys gfxinfo 包名
adb shell top
adb shell monkey -p 包名 -v 10000

这些基本就能覆盖 Android 性能测试的入门核心场景。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇