Overdraw是指屏幕上的一个像素由于图层的重叠,在于6.67ms内被重复绘制多次(16.67ms是每秒60帧每帧的耗时)。
关于如何避免Overdraw,这位老师写得不错,可以参考:
Android性能优化之如何避免Overdraw
文章里第一点提到【合理选择控件容器】,可能当时ConstraintLayout还没有被普用,作者提到了几个传统的ViewGroup的优缺点和建议用哪些。现在可以使用ConstraintLayout避免View的多层嵌套从而避免Overdraw,ConstraintLayout能做到一层嵌套里实现很复杂的UI,而且体验很不错。
进入主题吧。
当界面出现OverDraw时,APP视觉上的流畅性将会受到影响,且会造成性能的浪费。除了上面提到的如何避免,我们在解决已经出现的Overdraw问题时,也可以借助一些工具。Android Studio已经提供给我们了。
View Inspector或者Layout Inspector这个工具可以捕获调试中的Actvity的布局,帮助我们分析APP里View的层级情况。
日常开发中,为了查看界面是否出现过度绘制,我们打开安卓手机开发者选项的显示过度绘制选项
随后去到我们想要查看的界面,会显示各种颜色块(关于过度绘制的颜色标识开头提到的文章里也有说明,来源应该也是官方的配图)
接下来,我们使用Layout Inspector来分析界面的View层级情况。具体使用如下:
-
运行我们调试的APP
-
打开Android Studio的Tools菜单
-
选中正在调试的Activity
每次只能选一个Activity,且在非root过的普通手机只能捕获debug模式下的APP,无法捕获第三方APP的View层(比如微信),但在虚拟机上是可以的,大概是虚拟机满足某些开发世界的属性。如果想监测第三方APP的View层结构,可以使用虚拟机或root过的安卓手机试试。 -
稍后就能得到分析结果了