1. 启动性能优化
应用启动速度是用户对性能最直接的感知指标,优化启动流程至关重要。以下是关键优化策略:
- 精简 Application 的 onCreate 方法:避免在 Application 初始化时执行耗时操作。可将非必要逻辑延迟至实际使用时再加载,采用懒加载机制提升冷启动效率。
- 减少多余进程初始化:如内容提供者(ContentProvider)等组件若非立即需要,应避免在启动阶段进行冗余初始化。
- 优化界面布局渲染:推荐使用 ConstraintLayout 替代深层嵌套的布局结构,降低绘制层级,从而减少渲染压力。
- Dex 与资源文件瘦身:开启代码混淆,利用 SVG 矢量图替代部分位图资源,有效减小 APK 体积。
- 异步初始化第三方 SDK:对于统计、推送等 SDK,建议通过子线程或异步方式启动,避免阻塞主线程。
可通过 adb 命令测量应用启动时间,评估优化效果。
adb shell am start -W com.listen.mvvmtest1/.LoginActivity
过度绘制检测与优化
开发者选项中可开启“调试GPU过度绘制”功能,用于识别界面绘制次数过高的区域:
- 无色区域:仅绘制一次,处于系统底色状态,为最优情况。
- 蓝色区域:绘制两次,属于轻度过度绘制,大面积出现也可接受。
- 绿色区域:绘制三次,属中度过度绘制,中小范围无需处理;若大面积存在,则需检查背景重复设置或布局嵌套问题。
- 粉红色区域:绘制四次,已属较严重程度,此类区域应控制在屏幕面积的1/4以内,否则会显著增加 GPU 负担。
- 红色区域:绘制五次及以上,严重影响渲染性能,必须彻底避免。
2. UI 渲染与流畅性优化
卡顿表现为界面帧率低于预期,正常流畅体验需维持60FPS。当帧率明显下降时,用户即可感知不流畅。
- 避免主线程执行耗时任务:UI刷新运行在主线程,任何耗时操作都可能导致掉帧。应将网络请求、数据库读写等移至子线程处理。
- 简化布局层级:采用 ConstraintLayout 或 merge 标签减少嵌套深度,提高 Measure 和 Layout 阶段效率。
- 防止过度绘制:结合上述GPU过度绘制工具进行分析和调整。
- 图片加载优化:优先使用 Glide 等成熟框架加载图片,支持缓存管理与自动压缩,禁止直接用 ImageView 显示未经处理的大图。
- RecyclerView 性能调优:合理利用 ViewHolder 缓存机制,避免嵌套滚动容器;通过多 type 实现多样化布局,配合分页加载策略提升长列表性能。
借助 Android Profiler 可深入分析UI性能瓶颈:
- 选择目标应用进程。
- 点击【CPU】模块下的“Find CPU Hotspots”选项(即查找CPU热点)。
图表中横条宽度代表方法执行耗时。例如,在 onCreate 中发现 200ms 的延迟,说明存在性能隐患。
进一步查看堆栈信息,可定位到具体原因——如 Thread.sleep() 导致主线程休眠 200ms。
3. 内存管理优化
内存问题主要集中在内存泄漏与频繁GC引发的卡顿和抖动。
- 排查内存泄漏:使用 Android Profiler 的 Memory Profiling 功能监测内存增长趋势。若内存持续上升且不回落,可能存在泄漏。
- 对象复用机制:减少频繁创建新对象,尤其是循环体内。通过内存曲线是否出现剧烈“上下抖动”判断是否存在对象频繁分配与回收。
- Bitmap 高效管理:Bitmap 占用大量内存,通常直接进入老年代,易触发 Full GC。应尽量复用 Bitmap 对象,Android 8.0 起可通过 ImageDecoder 提供更高效的解码与复用支持。
分析内存泄漏的操作路径如下:
- 打开 Profiler → 选择 “Analyze Memory Usage”。
系统提示存在一处疑似内存泄漏,可根据该线索追踪对应类中的引用问题。
实时监控内存状态可通过以下界面完成:
观察内存曲线是否持续攀升以判断泄漏,同时注意是否有频繁抖动现象。
4. CPU 使用率优化
CPU 占用过高会导致界面卡顿及设备发热耗电。可通过 Profiler 查看后台线程活动情况,记录一段时间内的线程行为。
例如,在21秒内观察到三个线程持续运行,需重点审查其必要性及是否存在无限循环或空转问题。
5. 网络请求优化
最直观的优化方式是监控日志输出,检查是否存在高频重复请求、无缓存策略或接口合并不合理等问题。合理使用本地缓存、压缩传输数据、控制并发请求数量,均可显著提升网络效率。
6. 常用性能调试命令行工具(CL Tools)
Command Line Tools(简称 CL 工具)是开发过程中不可或缺的性能诊断手段,包括:
adb, am, pm, dumpsys, logcat, trace, systrace, perfetto 等。
常见命令示例:
- 测试应用启动耗时
adb shell am start -W com.xxx.xxx/.MainActivity
- 查看 App 内存使用详情
adb shell dumpsys meminfo com.xxx.xxx
- 获取每帧渲染耗时
adb shell dumpsys gfxinfo com.xxx.xxx framestats
- 查询设备耗电量统计
adb shell dumpsys batterystats
- 列出已安装的应用包名
adb shell pm list packages
- 强制结束指定进程
adb shell am force-stop com.xxx.xxx
- 发送自定义广播消息
adb shell am broadcast -a com.xxx.ACTION