性能优化是Android开发的核心技能,涉及内存、UI、网络、电量等多个维度。
1. 内存优化
内存泄漏检测
- LeakCanary:自动检测内存泄漏
- Android Profiler:实时监控内存分配
- MAT:分析hprof文件,查找支配树
内存优化策略
kotlin// 1. 使用SparseArray替代HashMap<Integer, Object> val sparseArray = SparseArray<String>() // 2. 图片内存优化 val options = BitmapFactory.Options().apply { inSampleSize = 2 // 缩放采样 inBitmap = reusableBitmap // Bitmap复用 } // 3. 使用LRU缓存 val cache = LruCache<String, Bitmap>(maxMemory / 8)
大图优化
- 使用inSampleSize压缩
- 使用WebP格式
- 使用图片加载库(Glide、Picasso、Coil)
2. UI渲染优化
布局优化
xml<!-- 1. 减少布局层级 --> <merge> <!-- 减少一层ViewGroup --> <include> <!-- 复用布局 --> <ViewStub> <!-- 延迟加载 -->
避免过度绘制
kotlin// 1. 移除不必要的背景 window.setBackgroundDrawable(null) // 2. 使用clipRect减少绘制区域 canvas.clipRect(left, top, right, bottom)
列表优化
kotlin// RecyclerView优化 recyclerView.setHasFixedSize(true) recyclerView.setItemViewCacheSize(20) recyclerView.setRecycledViewPool(pool)
3. 网络优化
请求优化
kotlin// 1. 使用连接池 okHttpClient.connectionPool(ConnectionPool(5, 5, TimeUnit.MINUTES)) // 2. 启用Gzip压缩 okHttpClient.addInterceptor(GzipInterceptor()) // 3. 合理设置超时 okHttpClient.connectTimeout(10, TimeUnit.SECONDS)
数据缓存
kotlin// 1. 使用Cache-Control @Headers("Cache-Control: max-age=3600") // 2. 本地缓存策略 val cache = Cache(cacheDir, 10 * 1024 * 1024) // 10MB
4. 电量优化
Doze模式和App Standby
- 理解系统省电机制
- 使用高优先级FCM消息
- 批量处理后台任务
后台任务优化
kotlin// 使用WorkManager替代后台Service val constraints = Constraints.Builder() .setRequiredNetworkType(NetworkType.CONNECTED) .setRequiresBatteryNotLow(true) .build() val workRequest = PeriodicWorkRequestBuilder<SyncWorker>(1, TimeUnit.HOURS) .setConstraints(constraints) .build()
定位优化
kotlin// 使用平衡精度模式 locationRequest.priority = LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY // 及时移除定位更新 fusedLocationClient.removeLocationUpdates(callback)
5. 包体积优化
资源优化
groovyandroid { // 1. 移除无用资源 lintOptions { checkReleaseBuilds false } // 2. 资源压缩 shrinkResources true minifyEnabled true // 3. 只保留特定语言 resConfigs "zh", "en" }
代码优化
groovy// 1. 使用ProGuard/R8混淆 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt') // 2. 动态功能模块 android { dynamicFeatures = [':feature1', ':feature2'] }
6. 启动优化
- 异步初始化
- 延迟加载非必要组件
- 使用SplashScreen API
7. 常用性能分析工具
| 工具 | 用途 | 使用场景 |
|---|---|---|
| Android Profiler | CPU/内存/网络监控 | 实时监控应用性能 |
| Systrace | 系统级性能分析 | 分析帧率、启动时间 |
| Layout Inspector | 布局层级分析 | 优化布局嵌套 |
| GPU Overdraw | 过度绘制检测 | 优化绘制性能 |
| LeakCanary | 内存泄漏检测 | 开发阶段检测泄漏 |
| StrictMode | 违规检测 | 检测主线程IO等 |
| Battery Historian | 电量分析 | 分析电量消耗 |
8. Systrace使用示例
bash# 抓取trace python systrace.py -a com.example -o trace.html sched gfx view # 分析重点 # 1. 查看帧率(Frame)是否掉帧 # 2. 查看UI线程是否阻塞 # 3. 查看GC频率
9. 性能优化检查清单
- 使用Release模式测试性能
- 在低端设备上验证
- 监控线上性能数据
- 定期进行性能回归测试
- 建立性能基准指标
面试要点
- 掌握内存优化的常见方法
- 理解UI渲染原理和优化手段
- 熟悉各种性能分析工具的使用
- 了解电量优化的最佳实践
- 掌握APK瘦身的技术方案