Hierarchy View 在Android SDK里自带,常用来查看界面的视图结构是否过于复杂,用于了解哪些视图过度绘制,又该如何进行改进。
首先还是简单的介绍下使用方法
通过打开Android Device Monitor,添加hierarchyviewer视图
链接设备,启动你要调试的app,选择你要获取Tree View的Activity,最后点击Load View Hierarchy
选择一个节点,就可以获取到布局绘制的时间,如图:
这里我们主要关注下面的三个圆圈,从左到右依次,代表View的Measure, Layout和Draw的性能,不同颜色代表不同的性能等级:
- 绿: 表示该View的此项性能比该View Tree中超过50%的View都要快;例如,一个绿点的测量时间意味着这个视图的测量时间快于树中的视图对象的50%。
- 黄: 表示该View的此项性能比该View Tree中超过50%的View都要慢;例如,一个黄点布局意味着这种观点有较慢的布局时间超过50%的树视图对象。
- 红: 表示该View的此项性能是View Tree中最慢的;例如,一个红点的绘制时间意味着花费时间最多的这一观点在树上画所有的视图对象。
但我们在使用过程中可能会遇到一些文件,现在就把我遇到的问题和一些解决的方法列一下
一、HierarchyViewer不能连接真机的问题
[hierarchyviewer]Unable to get view server version from device 00856cd5d08d2409
[hierarchyviewer]Unable to get view server protocol version from device 00856cd5d08d2409
[ViewServerDevice]Unable to debug device: lge-nexus_4-00856cd5d08d2409
[hierarchyviewer]Missing forwarded port for 00856cd5d08d2409
[hierarchyviewer]Unable to get the focused window from device 00856cd5d08d2409
Android系统出于安全考虑,Hierarchy Viewer只能连接开发版手机或模拟器,我们普通的商业手机是无法连上的(老版本的Hierarchy Viewer可以),这一限制在
frameworks/base/services/java/com/android/server/wm/WindowManageService.java
解决方法
Shell
adb shell service call window 3
若返回值是:Result: Parcel(00000000 00000000 '........') 说明View Server处于关闭状态
若返回值是:Result: Parcel(00000000 00000001 '........') 说明View Server处于开启状态
若是一台可以打开View Server的手机,我们可以使用以下命令打开View Server:
adb shell service call window 1 i32 4939
使用以下命令关闭View Server:
adb shell service call window 2 i32 4939
二、无法获取Measure、Layout、Draw的时间
有时候当我们链接真机后获取viewtree之后出现下图的情况,无法获取时间
解决方法
选中你要获取时间的节点,然后点击"Profile Node"
如果你获取了Tree View这里会是高亮的,我的这个截图是没获取Tree View时的。
参考:http://blog.csdn.net/swordgirl2011/article/details/52887925
参考:http://blog.csdn.net/wangjia55/article/details/38121281