1.什么是UI过度绘制(OverDraw)
在多层次重叠的UI结构里面,如果不可见的UI也在做绘制的操作,会导致某些像素区域被绘制了多次。这样就会浪费大量的CPU以及GPU资源。过度绘制最直观的影响就是会导致APP卡顿。还好系统有提供GPU过度绘制调试工具会在屏幕上用不同的颜色,来表明一个像素点位被重复绘制的次数。
- 紫色 绘制一层
- 绿色 绘制两层
- 粉红色 绘制三次
- 红色 绘制四层以上
在app开发中,完全是可以将UI绘制控制在3层以下的,而现实情况是很多开发者都没有太注意这块,很随意的setBackground,导致UI界面一片红的情况。接下来让我们一起看看怎么优化这块吧!
2.UI过度绘制检查
打开系统设置
Android设置中心->开发中选项->调试GPU过度绘制->现实过度绘制区域
开启之后,打开需要检查的应用界面,系统会提示现实过度绘制的区域。就像这样,看来Google自己的设置界面也有待优化呀!
3.消灭过度绘制
消灭UI过度绘制的核心思想,就是要减少setBackground的使用。操作原则如下:
- 1.对于重叠View,被挡住的UI不设置背景颜色。
- 2.背景可以统一,就在最底层设置背景,上层View不设置背景。
- 3.避免使用layer-list图层
4.踩坑总结
- layer-list导致多层绘制
- 同一个项目,不同module,同样名字的资源,导致更改无效。
- 在代码中和UI文件中都设置了background
- 更改影响到其他页面(需要考虑一下更改文件的使用范围)
- 有使用皮肤的,注意资源检查。