好记性不如烂笔头,这篇文章主要用来记录一下自己开发过程中使用到的优化方法
内存优化
工具
熟练常用:Lint、Android Profiler、LeakCanary
不常用:MAT
案例
-
内部类持有外部类引用(WebSocket、Handler)https://www.jianshu.com/p/facb562b02c9
-
Retrofit轮询认证结果,接口变动导致无法满足轮询停止条件,Activity关闭也无法释放内存,需要bindToLifecycle
-
静态变量持有对象引用(Activity)
-
数据库cursor使用受调用close
-
WebView内存泄漏,可为WebView指定新进程,退出时杀掉进程System.exit(0)
布局优化
工具
GPU过渡渲染、HierarchyViewer、Lint
案例
- 使用include标签重用布局
- 使用merge标签减少层级嵌套
- 使用ConstraintLayout减少层级,但是复杂布局可维护性差,可读性弱,需要灵活配套LinearLayout、RelativeLayout一起使用
- 使用HierarchyViewer检查Measure、Layout、Draw的耗时
- 使用drawableLeft...来简化布局,达到相同的效果
- LinearLayout的效率比RelativeLayout高,RelativeLayout慢于LinearLayout是因为它会让子View调用2次measure过程,而LinearLayout只需一次,但是有weight属性存在时,LinearLayout也需要两次measure
包体瘦身
工具
Lint、pngquant
案例
- 使用Lint检测无用资源文件并删除,尤其是图片资源
- 使用pngquant进行图片压缩,压缩率高达70%,失真率低,使用方式:sh PNGCompress PATH/TO/YOUR/RES
- 少用大图,能自己绘制的就自己绘制,比如用自定义shape做背景
- 去掉功能重复的依赖库,比如Glide和Picasso
- release包使用shrinkResource和minifyEnabled
release {
signingConfig signingConfigs.dcoin
jniDebuggable false
debuggable false
zipAlignEnabled true
shrinkResources true
minifyEnabled true
proguardFiles './proguard-rules.pro', './proguard-android.txt'
}
网友评论