Android的性能优化,主要是从启动速度、内存、流畅性、电量和流量等5个方面入手。
启动速度优化
- 不在主线程做耗时操作,如io读写、数据库操作等,使用子线程或延时处理
- 不在application中初始化过多的三方SDK
- 降低布局文件的嵌套层级,使用merge、include、viewstub标签
- 减少inflate和findViewById调用次数
内存优化
- 列表项使用ConvertView和ViewHolder缓存视图
- 不在自定义view的onDraw方法中new对象
- 不在循环体中new对象
- Bitmap、io流等及时释放
- 对象重用机制,如Bitmap缓存池
- Bitmap使用缩略图,降低编码格式
- 字符串拼接使用StringBuilder
- 使用android:largeHeap="true"获得更大的使用内存
- 使用android:sharedUid,共享app间的可用内存
- 排查内存泄漏问题
流畅性优化
- 防止过渡绘制问题
- 列表滑动过程中不加载图片
- 减少view的刷新次数
- 实时性高的界面使用SurfaceView
- 减少onMeasure方法的复杂度,onDraw方法尽量在16ms内完成
- 优先使用本地数据加载,再异步请求网络
- 使用HandlerThread,减轻主消息队列的负担
- 使用GPU呈现检查绘制时间
- 使用TraceView分析方法的执行时间
电量优化
- 正确使用WakeLock,及时release
- 使用view的keepScreenOn属性
- 根据使用场景,调低屏幕亮度,提供夜间模式
- 进程转入后台时,暂停网络请求,降低连接的心跳频率
- 控制AlarmManager的唤醒时间频率
- 使用JobScheduler执行非紧急任务
流量优化
- 请求网络数据后保存到本地,优先使用本地数据
- 服务器下发矢量图、缩略图等,视频提供清晰度选择
- 进程转入后台时,暂停网络请求,退出应用时停止请求
- 对于大量数据请求分步进行
- 使用三方优秀开源库如okhttp,glide等
- 使用流量工具检测大流量的场景并进行优化