Android 全方位性能优化合集
------启动速度 · 内存泄漏 · 卡顿 · 包体积
性能优化的本质是:在有限资源下,让用户体验更快、更稳、更省电、更流畅。
一、启动速度优化(Launch Time)
1. 启动类型与指标
| 启动方式 | 说明 |
|---|---|
| 冷启动 | App 进程不存在,从零创建 |
| 温启动 | 进程存在但 Activity 被销毁 |
| 热启动 | 进程 + Activity 均存活 |
✅ 核心指标
-
冷启动 ≤ 800ms(推荐)
-
Time to Full Display(TTFD)
2. 常见启动瓶颈
-
Application 初始化过重
-
主线程 IO / 反射 / 同步 Binder
-
首屏 Activity 布局层级过深
-
第三方 SDK 同步初始化
3. 实战优化方案
✅ Application 瘦身
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
initCoreSync()
initAsync()
}
}
-
必须同步:日志、Crash、基础配置
-
可异步:推送、统计、IM
✅ 启动器模式(Startup Library)
InitializerManager()
.add(LogInit())
.add(PushInit(), async = true)
.start()
✅ 首屏优化
-
使用 Launch Theme
-
延迟加载非首屏 Fragment
-
ViewStub 懒加载
✅ 监控手段
-
adb shell am start -W -
Perfetto / Systrace
-
埋点:onCreate → onWindowFocusChanged
二、内存泄漏优化(Memory Leak)
1. Android 内存常见问题
-
Activity / Fragment 泄漏
-
Handler / Thread 未释放
-
单例持有 Context
-
匿名内部类引用外部类
2. 典型泄漏场景
❌ 错误示例:
class MyActivity : AppCompatActivity() {
private val handler = object : Handler(Looper.getMainLooper()) {
override fun handleMessage(msg: Message) {}
}
}
✅ 正确做法:
private val handler = Handler(Looper.getMainLooper())
3. 检测工具
| 工具 | 用途 |
|---|---|
| LeakCanary | 自动检测内存泄漏 |
| Android Studio Profiler | 实时内存分析 |
| MAT | HPROF 深度分析 |
4. 优化原则
-
单例不持有 Activity Context
-
使用
ApplicationContext -
及时移除监听:
onDestroy() -
避免静态 View / Drawable
三、卡顿优化(Jank / Frame Drop)
1. 卡顿本质
-
主线程阻塞 > 16ms
-
UI 渲染超时
-
GC 频繁触发
2. 常见原因
-
主线程 IO
-
大图加载
-
嵌套 RecyclerView
-
过度绘制(Overdraw)
3. 优化方案
✅ 主线程治理
-
禁止主线程:
-
网络请求
-
数据库读写
-
JSON 解析
-
✅ 布局优化
-
ConstraintLayout 替代多层嵌套
-
减少
wrap_content -
关闭无用背景
android:background="@null"
✅ 渲染优化
-
开启 GPU Overdraw 检查
-
使用
View.setLayerType()谨慎 -
列表使用 DiffUtil
✅ 监控
-
FrameMetrics
-
Choreographer.FrameCallback
-
BlockCanary / Matrix
四、包体积优化(APK Size)
1. 包体积影响
-
下载转化率
-
安装失败率
-
低端机 OOM 风险
2. 优化维度
✅ 资源优化
-
删除无用资源(Lint)
-
图片转 WebP
-
使用 VectorDrawable
-
语言资源裁剪
resConfigs "zh"
✅ SO 优化
-
arm64-v8a only
-
动态下发 so(插件化)
✅ R 文件优化
-
开启 R8 / Proguard
-
移除 unused resources
✅ AAB(Android App Bundle)
Google Play 强制推荐
3. 自动化监控
-
ApkChecker
-
Matrix ApkSize
-
CI 包体积阈值告警
五、综合优化体系
1. 性能指标大盘
| 维度 | 指标 |
|---|---|
| 启动 | 冷启动耗时 |
| 内存 | PSS / Leak 次数 |
| 流畅度 | FPS / Jank |
| 包体 | APK / AAB 大小 |
2. 持续优化机制
-
性能门禁(CI)
-
灰度监控
-
线上 APM(Matrix / Firebase)
-
版本回归对比
六、总结
性能优化不是一次性任务,而是持续工程。
✅ 启动快
✅ 不泄漏
✅ 不卡顿
✅ 包体小
真正优秀的 Android App,是在 业务迭代与性能稳定之间取得平衡。