Android优化总结

177 阅读2分钟

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、停止动画、销毁WebView等可以通过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循环