1。框架优化选择合适的代码框架
大前端rn,weex,native。mvc,mvp,mvvm等
2。扫描优化。
sonarqube+jenkins代码扫描:漏洞,bug,异味
3。代码规范。
阿里android开发手册。
4。代码评审优化
gerrit+jenkins
5。代码性能优化
启动:
内存:
刷新频率
6。测试优化
遍历测试:appcrawler
自动化测试:appium,airtest(macaca)
性能测试:matrix,mobilPerf
1. 冷启动优化
也就是第一次启动app,而非app退到后台,再进入。在app冷启动的时候,如果在application做大量的初始化,就会导致启动速度慢,可能导致在启动的瞬间会长时间白屏。设置启动窗口主题的方式来替换系统默认的启动窗口,通过这种方式只是使用『障眼法』弱化了用户对启动时间的感知,但本质上并没有对启动速度做什么优化。
打开开发模式中的过度渲染,会发现界面颜色有的深有的浅,界面深的就是gpu渲染的次数多,越深越多。这就造成了资源的浪费。界面的渲染过程onMeasuer,onLayout,Ondraw这三个方法,每个方法测量,摆放,绘制都需要层层递归计算。所以界面层级越深,也就是界面套界面,控件套控件就会导致消耗大量计算。严重时会造成界面卡顿。所以在界面开发的过程中,用xml开发,或者用anko开发的同学就要处处留心,界面扁平化的设计。
3. 内存的优化
android内存的优化是个大问题,需要有理有据的进行。android对于app有完整一套评分机制,在系统内存紧张,超过四分之三的时候,就开始大量的回收内存了。谁的分数高谁就会被杀死。其中有一项是谁占用的内存高,谁的评分就会高,谁就会被杀死。内存占用过高也会带来,运行速度,电量消耗速率等等问题。所以各位在开发的过程中一定要注意内存方面的优化。个人经验主要分为三部分。(当然细分也会分好多种)。
1.内存溢出
俗称oom。也就是使用的内存大于向jvm申请的内存。有的同学会这么问,我多申请些不就行了么?开玩笑,每个人都多申请些,那jvm的日子还过不过了啊。有问题不能逃避,要沉下心去分析。
内存溢出在android端主要体现在大图的加载。1.对于图片有常规的压缩。2.在此推荐一个webp格式的图片,google出品,glide也是google出品,两者结合很ok的。
2.内存泄漏
和java的内存泄漏几乎一样。主要分为两个方向:1.资源对象未关闭,包括各种cusor,io等等。2.内部类引用外部类。包括handler,asyncktask等等,主要三步走:static修饰,weakferfrece包裹,外部类finish清除内部类工作
3.内存抖动
这个概念也是部分大神提出来的。也就是大量创建对象,大量销毁对象。内存频繁使用,回收。内存回收的时候,gc为了保障安全,就会停止其他所有工作,如果gc工作频繁,或者工作时间太长就会造成界面可能卡顿,抖动的严重问题。主要体现在listview,recyclerview滑动的过程中。
普通成员变量和临时变量不会造成特别大的压力,主要的压力来自于列表中的图片加载,图片加载是相当占内存的。采取的策略就是,监听列表的滑动在滑动的过程中不要加载图片,滑动停止的时候再加载。这点微信做的就非常好,今日头条就做的差了点
4. 代码习惯,编程规范的优化
有些代码的书写虽然异曲同工,但是也会有最优和最差的区别,下面举几个例子
1.避免使用enum,枚举占用内存是普通手段的十几倍,具体原理可以看android性能优化典范
2.避免使用Hashmap,也就是避免自动装箱和拆箱。android专门提供了SparseBooleanMap,SprseIntMap等等对象完全可以正常工作了
3.避免循环内实例化对象。避免循环内实例化对象。避免循环内实例化对象。明明可以优化,明明可以理解的,有些人就是不愿意听。会造成创建大量临时变量,栈内存压力大的
4.VectorDrawable矢量图,也就是能用代码写就不要用切图。。。说实话我也不想用代码写。。。因为懒
5.用kotlin+anko,kotlin写代码真的很爽很爽的,爽的不要不要。anko是代替xml布局,代码加载布局至少快4倍,但是这玩意儿有点不方便也就是不能热重载,不方便开发,所以还是不要用了。