大厂架构师经验分享!Android-性能优化最佳实践

原文链接:
什么是性能
快,稳,省,小,这四点很形象的代表了性能的四个方面,同时也让我们知道我们App现在是否是款性能良好的APP,如果有一项不达标,那么说明我们的应用有待优化 。
很多时候我们注重功能实现,保证能用,但是我们会发现,这样的应用很难拿的出手,里面的槽点太多了,性能很差,但是又不知道从哪里下手进行优化,那么我们就一步一步来,看看我们到底应该怎么优化我们的APP 。
1 、布局优化
和UI相关的首先就是布局,特别是在开发一些复杂界面的时候,通常我们都是采用布局嵌套的方法,每个人的布局思路不太一样,写出的也不太一样,,所以就可能造成嵌套的层级过多 。
官方 屏幕上的某个像素在同一帧的时间内被绘制了多次 。在多层次的UI结构里面,如果不可见的UI也在做绘制的操作,这就会导致某些像素区域被绘制了多次 。这就浪费大量的CPU以及GPU资源 。
白话 显示一个布局就好比我们盖一个房子,首先我们要测量房子的大小,还要测量房间里面各个家具的大小,和位置,然后进行摆放同时也要对房子进行装修,如果我们是一层,都在明面上,干起活来敞亮也轻松,可是有的人的房子,喜欢各种隔断,分成一个一个的大隔断间,每个大隔断间里还有小隔断间,小隔断间里有小小隔断间,还有小小小隔断间 。。。N层隔断间 。
看到这些头皮发麻吧,而且是一个大隔断间里面所有的小隔断,小小隔断等等都测量完摆放好,才能换另外一个大隔断,天呢,太浪费时间了,不能都直接都放外面吗?也好摆放啊,这么搞我怎么摆,每个隔断间都要装修一遍,太浪费时间了啊 。
我们的虚拟机也会这么抱怨,咱们家本来就不富裕,什么都要省着用,你这么搞,肯定运转有问题啊,那么多嵌套的小隔断间需要处理,都会占用cpu计算的时间和GPU渲染的时间 。显示GPU过度绘制,分层如下如所示:
通过颜色我们可以知道我们应用是否有多余层次的绘制,如果一路飘红,那么我们就要相应的处理了 。
所以我们有了第一个优化版本:
优化 1.0 如果父控件有颜色,也是自己需要的颜色,那么就不必在子控件加背景颜色如果每个自控件的颜色不太一样,而且可以完全覆盖父控件,那么就不需要再父控件上加背景颜色尽量减少不必要的嵌套能用和,就不要用,因为控件相对比较复杂,测绘也想要耗时 。
做到了以上4点只能说恭喜你,入门级优化已经实现了 。
针对嵌套布局,谷歌也是陆续出了一些新的方案 。对就是、merge和三兄弟 。
可以提高布局的复用性,大大方便我们的开发,有人说这个没有减少布局的嵌套吧,对,确实没有,但是和merge联手搭配,效果那是杠杠滴 。
merge的布局取决于父控件是哪个布局,使用merge相当于减少了自身的一层布局,直接采用父的布局,当然直接在父布局里面使用意义不大,所以会和配合使用,既增加了布局的复用性,用减少了一层布局嵌套 。
它可以按需加载,什么意思?用到他的时候喊他一下,再来加载,不需要的时候像空气一样,在一边静静的呆着,不吃你的米,也不花你家的钱 。等需要的时候中的布局才加载到内存,多节俭持家啊 。对于一些进度条,提示信息等等八百年才用一次的功能,使用是极其合适的 。这就是不用不知道,一用戒不了 。

大厂架构师经验分享!Android-性能优化最佳实践

文章插图
我们开始进化我们的优化
优化 1.1 使用和merge增加复用,减少层级按需加载,更加轻便