收集整理了平时工作中常见的需要注意的优化方案,文章只是以提纲的方式列出,没有做深入分析,其目的只是起到一个提醒的作用,在脑中有这个概念即可,工作中能有想到,然后能以keyword的方式搜索到就够了。

布局优化

1、<include>标签避免重复布局

2、<merge>标签和<include>合并使用减少层级关系

3、使用ViewStub进行按需加载布局。比如网络异常页面,只在网络异常的情况下加载,避免多余的布局和绘制时间。

绘制优化

1、避免在onDraw中做过于复杂的事情。如heavy calculate,for循环等

内存泄露优化

1、内存泄露可以使用MAT或LeakCanary检测

2、注意以下几种场景导致的内存泄露

       1)单例模式,生命周期和Application一致。内部最好不要持有activity等引用实例

       2)静态变量导致内存泄露,静态变量和类的生命周期一致

响应速度和ANR优化

 1、核心思想:避免在UI线程做过多操作

 2、可以采用RxJava和RxAndroid进行优雅的线程切换来避免

网络优化

1、客户端缓存ip列表,避免DNS请求

2、数据按需拉取,用到了才请求

3、时间戳优化。当服务端有新数据才进行优化

4、日志上报优化:本地合并日志,延迟上报

Bitmap优化

1、采用BitmapFactory.Options来压缩图片

2、采用LruCache和DiskLruCache进行图片缓存

ListView/GridView优化

1、采用ViewHolder

2、滑动时不宜启动大量异步任务。比如异步加载图片。首先会开启大量线程(可以用线程池优化),其次会在短时间内有大量的UI更新操作,造成卡顿。

3、不要在getView中的主线程内做耗时操作。

线程优化

1、可以采用线程池代替线程。

2、使用Excutor、ExcutorService、ThreadPoolExecutor等现成的javaapi代替。这也是Effective Java中推荐的做法。

架构优化

1、使用mvp、mvvm分层解耦。

2、针对复杂的APP可以使用MultiDex进行模块化解耦。

其他优化

1、多使用官方推荐的库

2、哪些技术最火就用哪些,一般没有问题。

3、多使用优秀的第三方库。

未完待续…