Android性能优化——减少过度绘制

Overdraw(过度绘制)

过度绘制描述的是屏幕上的某个像素在同一帧的时间内被绘制了多次。在多层次重叠的UI结构里面,如果不可见的UI也在做绘制的操作,会导致某些像素区域被绘制了多次,浪费CPU以及GPU资源,无法在1帧的时间内完成绘制,就会造成卡顿。
检测方法是开启开发人员选项中显示过度绘制区域的开关,层数与颜色对应如下图所示,
原色,没有发生过度绘制,屏幕上的像素点只被绘制了 1 次;
蓝色,1倍过度绘制,屏幕上的像素点被绘制了2次;
绿色,2倍过度绘制,屏幕上的像素点被绘制了3次;
粉色,3倍过度绘制,屏幕上的像素点被绘制了4次;
红色,4倍过度绘制,屏幕上的像素点被绘制了5次。
在这里插入图片描述

页面过度绘制优化前后的对比

检查了页面绘制性能情况,发现普遍存在2~3层过度绘制的问题,于是进行优化。
软件详情页:3.X—>1.X,部分卡片减少3层
在这里插入图片描述

优化的技巧

1)去掉window的背景; 2)搜索background关键字,将重复设置背景的地方为null或者直接删除; 3)搜索draw关键字,删除不必要的绘制; 4)ImageView可能会同时设置src和background,删除其中一个; 5)怀疑某一层的背景设置问题,直接改变该层的颜色或者直接去掉,看看是否会减少; 6)布局重构,将一些不必要的重叠、嵌套又各自带背景的控件平铺开来,再减少布局层级的同时,也能够减少过度绘制; 7)不透明的背景设计,控件点击态,也会导致过度绘制,需要权衡设计与性能;