一、前言
性能优化,是一个 Android 开发者从“能写”到“写好”的分水岭。
在业务迭代和功能膨胀的背景下,App 卡顿、耗电、内存暴涨、启动慢等问题屡见不鲜。
本文结合实际项目经验,总结 Android 性能优化的核心思路与落地方案,帮助开发者构建一套系统化的优化思维。
二、性能优化的核心目标
优化的最终目的,不是“让分数变高”,而是提升用户体验。
在有限资源下,让应用运行得更快、更稳、更省。
主要指标包括:
- 启动速度(冷启动、热启动)
- 页面流畅度(帧率 / 掉帧率 / 渲染时间)
- 内存占用(内存泄漏、对象复用、Bitmap管理)
- CPU & 电量(过度计算、线程滥用)
- 网络效率(请求合并、缓存策略、压缩传输)
三、启动优化:用户等待的第一印象
1️⃣ 延迟非关键初始化
很多 App 启动慢,根本原因在于 Application#onCreate 里做了太多事。
优化思路:
- 把非关键初始化延迟到首屏渲染后(如延迟 2s 执行)
- 例如:日志系统、推送、统计、广告 SDK 都可懒加载
new Handler(Looper.getMainLooper()).postDelayed(() -> {
initPush();
initAnalytics();
}, 2000);
2️⃣ 启动页轻量化
SplashActivity 只负责检查必要权限与路由逻辑,禁止做业务初始化
图片资源压缩至 WebP
避免复杂动画
尽量复用已加载资源
四、渲染优化:从掉帧到丝滑
1️⃣ 分析工具
使用 adb shell dumpsys gfxinfo 查看帧渲染耗时
每个帧耗时 <16ms 才能保持 60fps。
2️⃣ 优化建议
减少主线程阻塞(IO、网络、复杂运算应放后台)
使用 ViewStub、include、merge 优化布局层级
大量 RecyclerView Item 使用 DiffUtil 替代 notifyDataSetChanged()
动画尽量用 Lottie 或硬件加速的 PropertyAnimator
五、内存优化:让 App 更持久
1️⃣ 常见问题
静态持有 Context
Bitmap 未回收
Handler / Thread 未移除消息
监听器泄漏(RxJava / LiveData)
2️⃣ 调优工具
Android Profiler
LeakCanary(自动检测内存泄漏)
3️⃣ 示例
@Override
protected void onDestroy() {
super.onDestroy();
handler.removeCallbacksAndMessages(null);
binding = null;
}
六、线程与异步优化
原则:CPU 要忙得刚刚好
避免线程池滥用,每个模块不要新建线程池
建议统一封装 ThreadPoolExecutor:
ExecutorService executor = new ThreadPoolExecutor(
2, 4, 60, TimeUnit.SECONDS,
new LinkedBlockingQueue<>(),
new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
Thread t = new Thread(r);
t.setName("AppThreadPool-" + t.getId());
return t;
}
});
七、网络优化
开启 HTTP 压缩(GZIP)
使用 OKHttp 缓存机制
合并请求、批量上传
图片加载用 Glide / Coil 并开启缓存策略:
Glide.with(context)
.load(url)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(imageView);
八、监控与持续优化
优化不是一次性行为,而是持续工程。
建议在项目中引入以下监控指标:
启动耗时监控
卡顿帧率监控(BlockCanary)
内存泄漏监控(LeakCanary)
崩溃收集(Firebase / Bugly)
持续监控 + 自动上报 + 定期分析,
才能让优化成为开发流程的一部分。