说起性能优化,开发者往往感到棘手。在移动互联网竞争激烈的今天,APP 的性能直接决定了用户的留存率。近年来,无数面试者因无法系统阐述性能优化方案而折戟沉沙。其实抽丝剥茧开来,Android 的性能优化主要围绕四个核心维度展开:稳定性(内存溢出、崩溃)、流畅度(卡顿)、耗损(耗电、流量)以及安装包体积(APK 瘦身)。
一、稳定性——内存优化
内存管理是 Android 开发中最基础也最关键的环节。内存泄漏或 OOM(Out Of Memory)会导致应用崩溃,严重影响用户体验。
1. 工具使用:Memory Monitor
Android Studio 自带 Memory Monitor 工具,可实时分析堆内存使用情况。点击右下角标签页打开后,浅蓝色区域代表空闲内存(Free),深色区域代表已用内存。通过观察内存变化走势图,可以判断是否存在内存持续增长不释放的情况。建议结合 GC 日志分析,确认垃圾回收是否频繁触发。
2. 内存泄漏检测:LeakCanary
Square 公司基于 MAT(Memory Analyzer Tool)开发的开源框架 LeakCanary 是检测内存泄漏的神器。其原理利用了 Java 的 WeakReference 和 ReferenceQueue。将 Activity 包装到 WeakReference 中,若该 Activity 被回收,WeakReference 引用会被放入 ReferenceQueue;反之则说明存在泄漏。集成方式简单,只需添加依赖并在 Application 中初始化即可自动捕获泄漏对象并生成报告。
// 避免静态集合持有 Activity 引用
private static List<Activity> activities = new ArrayList<>(); // 错误示例
// 正确做法:使用 WeakReference 或生命周期感知组件
private static List<WeakReference<Activity>> activities = new ArrayList<>();
3. 代码规范:Android Lint
Android Lint 工具集成于 IDE 中,能扫描布局文件和代码中的潜在问题。例如硬编码字符串、未使用的资源、权限配置错误等都会发出警告。建议在 Gradle 配置中开启 checkReleaseBuilds,确保发布前完成所有 Lint 检查。
二、流畅度——卡顿优化
卡顿通常发生在用户交互过程中,直接影响体验。影响流畅度的两大因素是界面绘制和数据处理。
1. 界面绘制优化
UI 绘制层级过深、页面复杂或刷新不合理是导致卡顿的主因。常见场景包括启动页、列表滑动及页面跳转。
- 减少 View 嵌套:使用 ConstraintLayout 替代多层 LinearLayout 嵌套。
- 避免过度绘制:使用 Developer Options 中的'Debug GPU Overdraw'功能检测,尽量消除多余像素绘制。
- 异步加载图片:使用 Glide 或 Picasso 等库,配合内存缓存策略,避免主线程 IO 阻塞。
2. 数据处理优化
数据量大导致主线程阻塞是另一大原因,主要分为三种情况:
- 主线程执行耗时操作:如网络请求、数据库读写必须移至子线程。
- CPU 占用过高:复杂算法或循环计算应优化逻辑或使用原生库加速。
- 频繁 GC:对象创建过多导致 Young GC 频繁,应复用对象池(Object Pool)。
// 使用 Handler 或 Coroutine 处理耗时任务
(Looper.getMainLooper()).postDelayed(() -> {
}, );
lifecycleScope.launch(Dispatchers.IO) {
repository.fetchData();
withContext(Dispatchers.Main) {
adapter.submitList(data)
}
};


