其他优化及实践

Android性能优化系列——Understanding Overdraw

Android系统提供了测量Overdraw的选项,在开发者选项-调试GPU过度绘制(Show GPU Overdraw),打开选项就可以看到当前页面Overdraw的状态。

过度绘制(Overdraw)是指在一帧的时间内像素被绘制了多次:

理论上一个像素每次只绘制一次是最优的,但是由于层叠的布局导致一些像素会被多次绘制,而每次绘制都会对应到CPU的一组绘图命令和GPU的一些操作,所以对重叠不可见元素的重复绘制会产生额外的计算,需要尽量减少Overdraw的发生。

根据overdraw的次数会显示不同的颜色来区分:

没有颜色:意味着没有overdraw。像素只画了一次。

蓝色:意味着overdraw 1倍。像素绘制了两次。大片的蓝色还是可以接受的(若整个窗口是蓝色的,可以摆脱一层)。

绿色:意味着overdraw 2倍。像素绘制了三次。中等大小的绿色区域是可以接受的但你应该尝试优化、减少它们。

浅红:意味着overdraw 3倍。像素绘制了四次,小范围可以接受。

暗红:意味着overdraw 4倍。像素绘制了五次或者更多。这是错误的,要修复它们。

优化方案请看这里http://www.2cto.com/kf/201504/390390.html


下载bug项目https://github.com/lzyzsd/AndroidUIPorblems,请注意打开开发者选项中的ShowOverDraw选项,查看都有哪些过度绘制区域,并作出优化。


bug项目主页面

其他优化及实践_第1张图片


打开Overdraw(图片太长,以下的图均为截图方式)


其他优化及实践_第2张图片

上面有一个多余的线形布局,在主页的代码里把它删了

其他优化及实践_第3张图片

图中可以看到这三种颜色,在这里把它修改。


这里可以看到第一个按钮的java代码,它的页面内容其实是一层一层绘制出来的,这样就出现了过渡绘制问题。

其他优化及实践_第4张图片


其他优化及实践_第5张图片

第二个按钮的java代码里我们可以看到有个循环结构,这个循环结构是没有意义的,所以可以删除。

其他优化及实践_第6张图片

删除后

其他优化及实践_第7张图片

这样bug项目就优化完了。

你可能感兴趣的:(其他优化及实践)