android优化总结

从劲
2023-12-01

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做大量的初始化,就会导致启动速度慢,可能导致在启动的瞬间会长时间白屏。设置启动窗口主题的方式来替换系统默认的启动窗口,通过这种方式只是使用『障眼法』弱化了用户对启动时间的感知,但本质上并没有对启动速度做什么优化。

2. 过度渲染

    打开开发模式中的过度渲染,会发现界面颜色有的深有的浅,界面深的就是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倍,但是这玩意儿有点不方便也就是不能热重载,不方便开发,所以还是不要用了。

 类似资料: