什么是过度绘制(Overdraw)?
屏幕上的某个像素在同一帧的时间内被绘制了多次。在多层次的UI结构里面, 被盖住的底层UI也在做绘制的操作,这就导致某些像素区域被绘制了多次。
上面我简单画了一个图,一般来说 重叠四层及四层以上的绘制层级就算过度绘制。
一般避免过度绘制的标准是:允许有部分四层重叠,不允许存在 >=五层 的重叠。
如何找到过度绘制的地方?
1.用手机系统提供的过度绘制检测工具:
设置 => 开发者选项 => 调试GPU过度渲染 => 显示过度渲染区域。
这时候,手机会根据绘制层数,给所有的view持续渲染背景色。
四种颜色代表了四种不同的绘制程度:
蓝色: GPU过度绘制了 1倍。像素绘制了两次。
绿色: GPU过度绘制了 2倍。像素绘制了三次,中范围可以接受。
淡红: GPU过度绘制了 3倍。像素绘制了四次,小范围可以接受。
深红: GPU过度绘制了 4倍及更多。像素绘制了五次或者更多,不接受,请整改。
2.用高版本AndroidStudio自带的小工具进行查看
当你点击层次较深的View 左边就会显示出一个彩色的小条。
如果你点击层次较浅的view,那么左边将不会出现这个小条。
如何解决过度绘制?
1.LinearLayout或者RelativeLayout改为ConstraintLayout
ConstraintLayout更加有效,不太会用的看这里:Android ConstraintLayout约束布局 常用属性和辅助控件_赵星海的博客-CSDN博客
2.移除Window默认的Background
getWidow.setBackgroundDrawable(null);
3.移除XML布局文件中非必需的Background