浅谈Android性能优化
一、前言
任何一款优秀的Android App都离不开性能优化,那么Android性能优化的方向都有哪些呢?
这篇文章主要围绕Android的布局优化,线程优化、网络优化、电量优化以及代码优化等方面来阐述Android性能优化
二、布局优化
- 页面减少层级嵌套,当页面层级嵌套太多时容易出现过度绘制(OverDraw)的现象,从而造成卡顿,我们可以通过使用约束布局(ConstraintLayout),相对布局(RelativeLayout),当然还可以根据情况使用viewStub,merg以及include来减少层级嵌套;
- 在UI线程中,我们尽量避免在主线程中执行耗时的任务,通过在子线程执行通知UI线程更新布局;
- 自定义View或ViewGroup时,避免在draw的过程中创建对象,从而导致在绘制的过程中创建多个对象导致内存抖动甚至内存溢出的情况;
- 在View中使用属性动画时,在未执行玩动画必须移除动画。
三、线程优化
- 使用线程池(ThreadPool)完成线程的创建,避免创建过多的空闲线程从而使得大量空闲线程闲置或者被回收(GC),影响性能。
- 自定义线程策略,对线程的失败的执行操作自定义策略完成因线程被拒绝无法执行导致任务不能执行;
- 创建线程工厂(ThreadFactory)对线程进行重命名;
- 建议使用Rxjava实现线程调度,如果使用Handler尽量避免Handler内部类持有大对象引发内存泄露的问题。
四、网络优化
- 第一次请求网络的时候保存并添加时间戳,从而判断数据是否过期,避免重复请求网络数据。常见的数据持久化的方法有数据库(Sqlite),SharePreference,File;
- 根据情况Http/Https请求使用Cache-Control,以及设置max-age;
- 使用Json方式,减少数据量从而减少流量消耗;
- 图片压缩上传与加载,减少内存消耗的同时也可以减少流量的消耗。
五、电量优化
- 避免重复的进行网络请求以及多次重复加载网络图片或者H5页面;
- 避免使用Service、BroadcastReceiver,使用后必须及时销毁;
- 及时关闭蓝牙等硬件设备;
- 避免长期唤醒屏幕,在合适的位置销毁。
六、代码优化
- 代码规范建议使用阿里巴巴的编码规则,在Android Studio中安装插件,打开实时检测功能;
- 尽量避免使用内部类的方式,使用时需要销毁对应的对象,或者使用软引用(SoftReference)和弱引用的(WeakReference)方式,在合适的位置回收,比如onDestroy或者onStop中;
- 使用MVP或者MVVM架构,在这里建议使用MVVM结合DataBinding,完成解耦,使用LiveData监听ViewModel层的数据变化;
- 功能模块化或者插件化,创建多个Module;
- 熟悉并掌握Java设计模式,运用到项目中有着事半功倍的效果。