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

前言

过度绘制是指应用在单个帧中多次绘制相同的像素。通常过度绘制浪费了GPU时间去渲染哪些不影响用户所见的像素,从而降低了UI的性能。Android设备提供了一个开发者工具来帮助我们调试过度绘制。通过这个工具,我们可以直观地发现哪些地方出现了过度绘制,从而可以尽量减少过度绘制。

调试过度绘制

Android设备提供了一个开发者工具来帮助我们调试过度绘制。这个工具根据像素的过度绘制次数在该像素上显示特定的颜色来可视化过度绘制。

首先,打开设备的 设置 应用,并找到 开发者选项

然后,进入开发者选项,点击开启 开发者选项。如下图所示:

开启开发者选项.png

接着,在硬件加速渲染部分,点击选择 调试GPU过度绘制。如下图所示:

调试GPU过度绘制.png

最后,在弹出的调试GPU过度绘制对话框中,点击选择 显示过度绘制区域。这样就打开了调试GPU过度绘制的工具,效果如下图所示:

显示过度绘制区域.png

屏幕上显示的各种颜色表示了该像素的过度绘制次数:

  • 真实的颜色 表示没有过度绘制。
  • 蓝色 表示过度绘制一次。
  • 绿色 表示过度绘制两次。
  • 粉色 表示过度绘制三次。
  • 红色 表示过度绘制四次及以上。

通过这些特定的颜色,我们就可以知道应用界面过度绘制的情况。

减少过度绘制

减少过度绘制最常用的一种方法是:删除布局中不需要的背景

一个不需要的背景可能永远不可见,因为它可能完全被应用在该View上绘制的东西所覆盖。例如,当系统绘制子View时,ViewGroup的背景可能被完全覆盖了。

还有一种常见的场景是:多个ViewGroup共享一个相同的背景颜色时,我们可以删除不需要的背景。这时,你可以设置最底层的ViewGroup的背景为需要的颜色,而所有在上面的ViewGroup都不需要再设置背景。

注意: 有些过度绘制是不可避免的。当你在调试应用的过度绘制时,目标应该是界面上比较少的地方显示粉色或者红色。

总结

过度绘制是指应用在单个帧中多次绘制相同的像素。通常过度绘制浪费了GPU时间去渲染哪些不影响用户所见的像素,从而降低了UI的性能。Android设备提供了一个开发者工具来帮助我们调试过度绘制。通过这个工具,我们可以直观地发现哪些地方出现了过度绘制,从而可以尽量减少过度绘制。

例子

常见的一个例子是:列表item与Activity底层的ViewGroup的背景颜色一致,当你在两个布局中都设置了相同的背景颜色时,此Activity就会出现过度绘制。如下图所示:

列表项过度绘制.png

此时,减少过度绘制的方法通常是删除列表item布局中的背景,效果如下图所示:

列表项过度绘制优化.png

可以看到,Activity的过度绘制明显减少了。

参考