为了提供顺畅、稳定且省电的应用体验,您需要找出并解决稳定性、界面呈现、内存消耗、后台工作、启动延迟和 build 优化方面的常见性能瓶颈。
本部分中的指南介绍了每种问题的底层 Android 平台行为,并逐步介绍了如何使用 Android Studio 性能剖析器、Perfetto、Logcat 和 ApplicationExitInfo 等工具来诊断、分析和修复这些问题。
稳定性
渲染和启动
- 呈现速度缓慢:找出并修复因布局开销过大、绑定传递或主线程停滞而导致的界面帧丢失或冻结(
>16ms和>700ms)。 - 慢会话(仅限游戏):使用
SurfaceFlinger衡量帧同步,并使用 Android Frame Pacing (Swappy)、Vulkan 和 Android 动态性能框架 (ADPF) 优化游戏帧速率。 - 应用启动时间:了解冷启动、温启动和热启动的内部机制,测量初步显示所用时间 (TTID) 和完全显示所用时间 (TTFD),并优化启动工作。
内存管理
- 低内存终止程序 (LMK):了解 Android 低内存终止守护程序 (
lmkd) 如何通过oom_adj_score对进程进行优先级排序,以及如何在 Android Studio、Unity 和 Unreal Engine 中分析内存占用情况。 - 内存用量(匿名 RSS + 交换空间):衡量并减少应用在前台、服务和后台状态下的匿名常驻内存大小 (RSS) 和交换内存占用量。
- 位图内存用量:诊断过大或泄露的位图分配,并在界面组件移至后台时释放图形缓冲区。
电池和后台工作
- 唤醒锁定操作过多:避免长时间持有部分唤醒锁定,并将后台任务迁移到
WorkManager或JobScheduler。 - 部分唤醒锁定被卡住:确保在所有执行路径和错误路径中,每个获取的部分唤醒锁定都被正确释放。
- 过多的唤醒:减少精确闹钟唤醒次数,并批量处理或延迟预定的后台工作。
- 后台 WLAN 扫描次数过多:尽量减少后台 WLAN 扫描频率,并使用被动或批处理的位置和连接 API。
- 后台网络使用量过高:使用
WorkManager限制批量处理和延迟后台移动网络传输。 - 电池用量过高:通过分析 CPU、传感器和无线电活动,诊断移动设备和 Wear OS 设备上的电池电量消耗过快问题。