布局优化:
1、尽可能减少布局层级,ConstraintLayout, include, merge, ViewStub,Space占位不绘制
2、减少不必要或重复的背景设置
数据结构与算法:
ArrayList、LinkedList
LinkedHashMap、HashMap
SparseArray与ArrayMap
线程优化:
1、不要直接new线程,使用线程池、asyncTask、rxjava、kotlin协程
内存泄漏:
1、handler
2、非静态内部类(包括匿名内部类)默认就会持有外部类的引用
3、合理释放资源bitmap、cursor、io流
4、eventbus\ BroadcastReceiver\disposable\Subscription注册、注销
5、单例(如果单例对象要引用context,请使用全局的上下文对象)
6、静态变量引用activity
7、属性动画造成内存泄露
8、WebView造成内存泄露
网络优化:
1、减少网络请求次数,服务器端适当做请求合并(api)
2、大量数据的加载采用分页的方式
3、网络数据传输采用GZIP压缩
4、合理使用缓存,减少不必要网络请求
5、上传图片时,在必要的时候压缩图片
6、提前或延时操作,避免扎堆
APK减包:
1、建议把cruncherEnabled设为false,然后通过tinypng手工压缩PNG图片
2、使用webp图片格式
3、混淆
4、尽量使用一套资源
5、在build.gradle文件中启用shrinkResources
6、最小化第三方库中资源的使用
7、纯色图片使用shape
8、减少native库的大小,使用armeabiV7架构下so包就可以了
9、对比选择最优库,不要引入多个类似功能的库
代码优化:
1、尽量使用局部变量
2、如果知道集合长度,尽量初始化时设置集合容量
3、字符串拼接不要使用“+”,而是使用StringBuilder
4、逻辑优化,理清程序逻辑,减少不必要的操作
工具使用:
1、Lint:检测未使用到资源,不规范的代码
2、第三方工具,LeakCanary、bugly