开篇废话
我们平时在做UI布局优化的时候,时常提起的一个工具Hierarchy Viewer,它提供了一个很直观的可视化界面来观测布局界面的层级,可以检查布局层次结构中每个视图的属性和布局速度。它可以帮助我们查找由视图层次结构导致的性能瓶颈,从而帮助我们简化层次结构并减少过度绘制(Overdraw)的问题
欢迎访问我的个人博客:senduo's blog
技术详情
我们从以下几个步骤来讲述Hierarchy Viewer工具的使用:
第一步:开启Hierarchy View的工作界面
第二步:检测移动设备(虚拟机)的View Server是否开启
第三步:移动设备开启某个需要检测的界面,Hierarchy View 加载该界面视图
第四步:工具熟悉
第一步:开启Hierarchy Viewer的工作界面
针对Android Studio 2.x版本系列:
在Android Stduio的菜单栏依次点击:
Tools>Android>Android Device Monitor
点击后,稍等一会会弹出一个界面:
选择Hierarchy View之后,我们就能看到Hierarchy View工具的工作界面了:
第二步:检测移动设备(虚拟机)的View Server是否开启
当移动设备正确连接PC之后,使用adb指令在命令行里面输入:
adb shell service call window 3
如果提示adb不是内部指令的话,记得进行配置环境变量,将platform-tools里面的adb.exe路径配置到Path中去(Windows环境,其他系统的类似)
执行后
若返回值是:Result: Parcel(00000000 00000000 '........') 说明View Server处于关闭状态。
若返回值是:Result: Parcel(00000000 00000001 '........') 说明View Server处于开启状态。
如果是一台可以打开View Service Android设备(Android开发版手机,模拟器,注意版本要在Android4.1及以上哈)可以用以下命令操作View Server
打开View Server命令:
adb shell service call window 1 i32 4939
关闭View Server命令:
adb shell service call window 2 i32 4939
第三步:移动设备开启某个需要检测的界面,Hierarchy View 加载该界面视图
当命令行显示了Result: Parcel(00000000 00000001 '........'),重新打开一下Android Device Monitor,然后点击Load view按钮,就能加载界面的一个视图了:
如果点击加载视图按钮没有看到右边的图的话,把Android Device Monitor整个界面先关掉,然后将View Server先关闭,再查看是否关闭,没有关闭,就多运行几次关闭指令
关闭View Server命令:
adb shell service call window 2 i32 4939
然后运行开启View Server,知道开启了View Server,再重新打开Android Device Monitor,依然不行,就重复多次,如果三四次之后还是不行,那问题就另当别论了哈
第四步:工具熟悉
Tree View(中心):显示视图层次结构。您可以使用鼠标拖动并放大,底部的缩放控件。每个节点表示它的View类名和ID名称。
Tree Overview(右上):为您的应用程序的完整视图层次结构提供鸟瞰图。移动灰色矩形以更改树视图中可见的视口。
Layout View(右下角):显示布局的线框视图。当前所选视图的轮廓为红色,其父视图为浅红色。
三个小圆点, 依次表示Measure, Layout, Draw, 可以理解为对应View的onMeasure, onLayout, onDraw三个方法。
绿色, 表示该View的此项性能比该View Tree中超过50%的View都要快。
黄色, 表示该View的此项性能比该View Tree中超过50%的View都要慢。
红色, 表示该View的此项性能是View Tree中最慢的
界面中出现的红色圈圈多了,我们就要注意了:
Measure红点, 可能是布局中嵌套RelativeLayout, 或是嵌套LinearLayout都使用了weight属性
Layout红点, 可能是布局层级太深。
Draw红点, 可能是自定义View的绘制有问题, 复杂计算等。
干货总结
这篇文章是为了下一篇的UI布局优化做的一个准备,因为,在UI布局优化中,这个工具一般是少不了的,在我们实际生产中,也是非常有用的一个工具,所以,我们需要好好了解这个工具。
本篇内容使用的环境为Windows7 + Android Studio + Genymotion虚拟机 2.3.3,所以如果用Eclipse的小伙伴有点不适用这个,不过,原理差不多,adb指令也是一样,具体得自身去尝试了,毕竟Android Studio工具是google推荐的,属于正宫娘娘
此篇中暂时没有提及真机版移动设备使用Hierarchy View 这个工具,因为google处于安全层面的考虑,真机无法开启View Server这个服务,不过还是有方法可以使用,只是稍微麻烦一点,我这里就不进行赘述了。