Android 性能与稳定性专题
从启动慢、滑动掉帧或 WebView 崩溃进入,先确定要测量的现象,再收集能解释它的证据。每条路线都连接到具体的工具操作与验证步骤。
按症状开始排查
| 现象 | 第一篇 | 接着做什么 |
|---|---|---|
| 冷启动慢,首帧与可用时间混在一起 | 启动指标:TTID、TTFD 与 Macrobenchmark | 固定启动条件,再用 Perfetto 定位关键路径 |
| 有卡顿但不知道 trace 怎么抓、怎么看 | Perfetto 入门与抓取流程 | 复现一次问题,检查主线程、调度和帧时间 |
| WebView 白屏或收到渲染进程退出回调 | WebView 渲染进程崩溃与恢复 | 区分退出信号与根因,验证销毁和重建流程 |
| Compose 列表滑动不流畅 | LazyColumn 性能排查 | 使用 release 构建,检查列表身份、状态读取与帧耗时 |
从测量到回归的阅读顺序
- 定义启动指标:分开冷、温、热启动以及首帧与可用时间。
- 抓取并阅读 Perfetto trace:把用户操作与线程工作、等待时间对应起来。
- 选择一个有证据支持的瓶颈进行修改,保留设备、数据集、构建类型和采样条件。
- 用 Macrobenchmark 重复测量,比较分布并检查回归。
- 若问题表现为进程退出,沿 WebView 稳定性排查 收集事件;性能 trace 不能单独证明崩溃根因。
核心文章
- Android 启动优化:从 Zygote fork 到首帧上屏的 Perfetto 实战
- Android App 启动优化专项:指标、链路、工具与治理方案
- RecyclerView 缓存机制详解:四级缓存、复用与 Prefetch
- Android Bitmap 内存模型:Java 堆、Native 堆与 Hardware Bitmap
- Android RenderThread 与 HWUI:渲染管线、DisplayList 与掉帧分析
- Android 渲染机制与图形栈:View、HWUI、SurfaceFlinger 全链路
- Android Perfetto 与 Systrace:系统级性能分析和调优方法
- Android Perfetto 追踪体系:ftrace、TrackEvent 与生产级性能监控
- Android 音频系统原理:AudioFlinger、混音策略与 AAudio 低延迟
- Android Macrobenchmark 实战:启动、滚动与性能回归测试
运行时、内存与图形性能
- 深入 Android ART 垃圾回收机制全链路
- 深入 Android ART dex2oat 编译管线:从 DEX 字节码到 OAT 机器码的 AOT/JIT 混合编译
- 深入 Android Native 内存分析全链路:从 malloc_debug 到 heapprofd 的 Native 堆内存泄漏排查实战
- 深入 Android Vulkan 图形渲染全链路:从 OpenGL ES 迁移到 GPU 驱动调优的低开销渲染架构
- Android 电源管理深度解析:从 Wakelock 滥用到 Doze 模式的省电工程实践
- 深入 Android AlarmManager 定时调度全链路:从 AlarmManagerService Binder 调用到 Doze 模式下的精确唤醒架构解析
- 深入 Android DEX 字节码格式与 MultiDex 加载全链路解析
- 深入 Android Media3 媒体播放架构:从 ExoPlayer 演进到 MediaSession 统一播放管线的全链路解析
- 深入 Android 网络协议栈全链路:从 DNS 解析到 HTTP/3 QUIC 的移动网络优化工程实践
- 深入 Android 字体渲染架构:从 Typeface 加载到 Skia 字形光栅化的全链路解析
性能排查框架
- 先确认指标:P50、P90、P99、首帧、掉帧、内存峰值。
- 再抓证据:Perfetto trace、log、ANR trace、heap dump、benchmark。
- 然后拆链路:主线程、Binder、I/O、渲染、GC、调度。
- 最后做验证:本地 benchmark、灰度监控、回归门禁。
下一步
如果性能问题和 UI 状态更新有关,继续阅读 Jetpack Compose 深度解析。如果瓶颈来自模型推理、NPU、功耗和热管理,转到 Android 端侧 AI。如果问题来自构建、测试和发布链路,转到 移动端工程化。