Android使用View Inspector分析Overdraw

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层级情况。具体使用如下:

  1. 运行我们调试的APP

  2. 打开Android Studio的Tools菜单


    找到Layout Inspector
  3. 选中正在调试的Activity


    每次只能选一个Activity

    每次只能选一个Activity,且在非root过的普通手机只能捕获debug模式下的APP,无法捕获第三方APP的View层(比如微信),但在虚拟机上是可以的,大概是虚拟机满足某些开发世界的属性。如果想监测第三方APP的View层结构,可以使用虚拟机或root过的安卓手机试试。

  4. 稍后就能得到分析结果了


    左边是View的层次,中间是屏幕内容,右边是View的各种属性

Layout Inspector的另一个功能还可以用于开发维护中寻找视图,我们可以对要维护的界面进行监测,得到结果后,点击Layout Inspector结果里想要操作的视图的id,如果id的命名比较规范,随后在AS中根据id全局搜索就可以很快找到界面对应的xml,随后顺藤摸瓜也可以找到代码。这在刚接触大型的应用维护工作时,能提高很多效率。

你可能感兴趣的:(Android使用View Inspector分析Overdraw)