1. 启动优化一般指冷启动的优化,从点击桌面的icon图标到显示页面之间的时间长短
adb shell am start -W 包名/启动activity全包名
查看启动事件;
优化的可操作方法是把第三方的或者不需要马上使用的内容不要在Application的继承类中初始化,可以放到使用的时候初始化或者延迟初始化;
把第三方的初始化延迟后还是很客观的,截图如下
2.UI优化
1、FramLayout和LinearLayout布局相对RelativeLayout绘制简单,但是RelativeLayout减少嵌套;负责布局建议使用ConstraintLayout
2、include和merge搭配使用,减少嵌套并且复用布局文件;ViewStub按需加载,适用于控件在某种状态下不加载
3、移除不居中不需要的背景
4、通过手机选项【显示布局边界】可以查看布局是否存在多余层次绘制
3.绘制优化
主要是针对自定义控件绘制过程中onDraw()方法会多次调用,所以减少方法内的操作
1、减少耗时操作,减少嵌套循环操作
2、减少局部变量,多次调用出现多个临时变量,导致系统更加频繁GC
4.内存优化
GC算法及分区
1、单例或者静态变量持有的对象生命周期小于应用周期,则容易发现内存泄露,特别是持有Activity
2、非静态内部类或者匿名内部类持有外部引用,如果内部类有耗时操作,生命周期大于外部引用周期,则存在内存泄露,可以通过静态内部类或者弱引用处理
关于引用有四种:强引用、软引用、弱引用和虚引用
3、资源未关闭导致的内存泄露
cursor、文件流、手动注册广播、开启服务、EventBus等可以通过leakcanary集成查看
4、主要是编写代码时注意规范;另外通过MAT也可以查看泄露情况
5. 资源优化
1、纯色背景可以使用shape代替Drawable
2、Android可以使用Webp格式的图片可以使用这个格式的图片
3、开启资源压缩,自动删除无用的资源
android {
...
buildTypes {
release {
shrinkResources true
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro'
}
}
4、代码混淆 使用proGuard 代码混淆器工具,它包括压缩、优化、混淆等功能
android {
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile(‘proguard-android.txt'),
'proguard-rules.pro'
}
}
5、插件化,减少包大小
6.RecycleView和Bitmap
1、如果是listView则注意ViewHolder的复用;
2、分页
3、对图片质量和图片尺寸压缩显示
7、微优化
1、常量使用static final
2、使用增强的for循环