首先介绍下什么叫过度绘制? 大家都知道我们显示在前端的页面都是一层盖住一层画上去的,那么过度绘制就是指,我们xml里嵌套的层级过多,导致在界面绘制的时候,时间就会越慢,这就是过度绘制。
那么如何判断你所写的app 页面是不是过度绘制呢?
1. 打开手机的开发者选项-开发者工具
2.里面除了有我们经常用到的USB调试,还有一个选项是 <调试GPU过度绘制>,如下图所示:
3.打开这个选项,你会发现一个神奇的事情,就是你的手机变成五颜六色的啦。
问题来了,那么那些颜色又代表什么?
看下下面的图就知道了(摘自网上)。
我们先来看下以下几个页面:
从上述两幅图中,可以发现qq 界面还是做的挺不错的,屏幕大部分是2x还有1x,属于相对较好的,而第二张app的页面就不太好了,扎一看,基本都是3x和4x。
那么这些绘制的颜色对我们的应用又有什么影响呢?
补充一点:上述1x,2x代表屏幕上1个像素被绘制了多少遍,绘制的层次越多,颜色越深。
这个在好一点的手机上没有多大的区别,但是在差的手机上,会影响页面的加载速度。所以说啊,这个问题对于一个千万级用户的app来说,当然是不能放过滴。
如何优化呢?
我弄过好几个页面的优化,一般大多都是background导致,每个层级都有background,那么系统在绘制的时候,先绘制底层的颜色,再绘制下一个层的.....依次类推,嵌套多了,子然就慢了,但是我们知道其实底部的颜色用户是看不到的,系统因为我们的设置,而帮我们绘制一遍显然是没有必要的。
- 检查各个层级之间的background,避免重复绘制。
- 减少布局的嵌套
- 选择合适的控件(能用一个写了的不要写2个,你懂的)
在这里给大家推荐一个安卓自带的xml分析工具,叫 Hierarchy View ,我之前写了一篇文章关于它的使用 android 优化之layout
另外关于嵌套还可以参考:Android布局优化之include、ViewStub、merge
好了,最后看下我优化后的布局:
嘿嘿,是不是好多了,还不赶紧动起你的小手搞起来。(亲测,速度上加快了2s左右).