Android性能优化来龙去脉总结

395 阅读2分钟

一、性能问题

二、导致问题原因

1、人为在ui线程中做了轻微的耗时操作,导致ui线程卡顿。

在onCreate中读pref,解析json数据。

2、layout过于复杂,无法在16ms完成渲染。

ConstraintLayout才是一个更高性能的消灭布局层级的神器。ConstraintLayout 基于Cassowary算法,而Cassowary算法的优势是在于解决线性方程时有极高的效率,事实证明,线性方程组是非常适合用于定义用户界面元素的参数。

3、同一时间执行的动画过多,导致CPU或者GPU负载过重。

4、view过度绘制的问题。

手机设置里面的开发者选项,打开Show GPU Overdraw的选项,轻松发现这些问题,然后尽量往蓝色靠近。

5、gc过多的问题。

6、资源加载导致执行缓慢。

a、预加载,即还没有来到路径之前,就提前加载好,诶,好像x5内核就是酱紫哦。

b、实在是要等到用到的时候加载,请给一个进度条,不要让用户干等着,也不知道什么时候结束而造成不好的用户体验。

7、工作线程优先级设置不对,导致和ui线程抢占cpu时间。

8、静态变量。

三、解决问题

1、GPU过度绘制,定位过度绘制区域

a、减少布局层级,使用ConstraintLayout替换传统的布局方式。

b、检查是否有多余的背景色设置。

6、json反序列化问题

json反序列化是指将json字符串转变为对象,这里如果数据量比较多,特别是有相当多的string的时候,解析起来不仅耗时,而且还很吃内存。解决的方式是:

a、精简字段,与后台协商,相关接口剔除不必要的字段。保证最小可用原则。

b、使用流解析,之前我考虑过json解析优化,在Stack Overflow上搜索到这个。于是了解到Gson.fromJson是可以这样玩的,可以提升25%的解析效率。

7、viewStub & merge的使用。

tools:showIn=""属性,就可以正常展示preview了。

四、代码建议

转载:wetest.qq.com/lab/view/39…