Hierarchy Viewer
有时应用的布局结构会减慢运行速度,为了帮助解决这个问题,Android SDK提供了Hierarchy Viewer工具。
Hierarchy Viewer可以帮助调试和优化UI。它提供了布局层次的可视化表示(View Hierarchy窗口),并带有每个节点的性能信息。它还提供了一个放大的视图(Pixel Perfect窗口)来进一步检测布局的像素。
使用Hierarchy Viewer
运行Hierarchy Viewer并选择一个窗口
使用Hierarchy Viewer步骤如下:
- 连接设备或者启动一个模拟器。为了保证安全,Hierarchy Viewer只能连接开发版本的Android系统。
- 安装要测试的应用。
- 运行应用,并保证UI可见。
- 启动位于
<sdk>/tools/
目录的hierarchyviewer。 -
启动后的窗口展示了一个设备和模拟器的列表。点击每一项左侧的箭头可以展开列表,会显示每个设备或模拟器正在运行的UI可见的应用。
图1 - 选择要调试的应用,可以选择点击Load View Hierarchy查看视图层次,或者点击Inspect Screentshot查看Pixel Perfect窗口
关于View Hierarchy窗口
View Hierarchy窗口展示应用的视图对象。针对每一个视图对象,View Hierarchy窗口还展示了渲染性能数据。
在该窗口,你会看到4个窗格:
图2-
Tree View:左侧窗格展示了视图树。视图树可以检测单独的视图对象,或者视图对象的关系。要缩放视图树,可以使用底部的滑块,或者使用鼠标的滚轮。可以使用鼠标拖动视图树的显示范围。
在底部Filter by class or id中输入类或者id值,可以搜索匹配的节点。匹配的节点,背景会由灰色变为蓝色。
点击顶部的Save As PNG可以保存视图树的截图。
点击Capture Layers可以将布局保存为PSD文件。每个视图会被保存为一个单独的PhotoShop图层。 - Tree Overview右上窗格为视图树的概览。
- Properties View右侧中部的窗格为属性窗口。
-
Layout View右下窗格为布局视图。点击该窗格的一个视图对象,会高亮显示。每一块的边框颜色提供了额外的信息:
- 粗红色:当前选择的视图。
- 细红色:当前选择视图的父级。
- 白色:表示该视图不是当前选择视图的父集或者子集。
在当前页面的UI变化后,View Hierarchy窗口不会自动更新。需要点击顶部的Load View Hierarchy参会刷新。
同样的,如果切换到了其他页面,窗口也不会自动更新。想要更新它,你需要首先点击Hierarchy Viewer工具左下角的按钮切换到第一次打开时的选择应用的窗口,然后重新加载视图。
使用视图树中的单个视图
视图树的每个节点代表一个单独的视图。一些信息是始终可见的:
图3- 视图的类型,即所属的class
- 视图地址
- 视图的id值,即
android:id
- 性能指标:三个带颜色的圆点,分别代表measure、layout、draw三个方法相对于其他视图的渲染速度:
- 绿色:表示该视图快于视图树中50%的视图。
- 黄色:表示该视图慢于视图树中50%的视图。
- 红色:表示该视图是视图树中最慢的。
- 视图索引:该视图在父级的索引,从0开始。
选择一个节点,会出现一个小窗口来展示额外的信息:
- 图片:该视图的截屏。
- 视图数量:该节点所拥有的视图数量,包含本身。
- 渲染时间:实际的measure、layout、draw耗时。
使用View Hierarchy调试
View Hierarchy窗口可以通过提供UI的静态显示来帮助调制应用。在你操作应用的时候,这个显示保持不变,直到你执行invalidate并request layout来重绘。
重绘步骤如下:
- 选择视图树中的一个视图。重绘一个视图会强制重绘它的子视图。
- 点击顶部的Invalidate。这会将视图标记为无效的,并在下次布局时进行重绘。
- 点击Request Layout。绘制需要重绘的视图。
手动重绘允许你观察视图树,并在代码中通过单步调试检查单个View对象的属性。
通过View Hierarchy进行优化
View Hierarchy帮助你甄别减慢渲染速度的性能问题。你需要查看带有红色或者黄色圆点的节点,查看是一直慢还是某些条件会变慢。
注意慢性能不一定就是问题,尤其是对于ViewGroup对象。在ViewGroup有很多子View时渲染肯定会变慢。
使用Pixel Perfect
Pixel Perfect是一种用于检查像素属性并从设计图形中绘制UI的工具。
关于Pixel Perfect窗口
Pixel Perfect窗口展示了一个放大的当前设备或模拟器可见的屏幕图像。你可以使用它检测单独的像素属性。你也可以用它帮助你根据位图设计布局应用程序UI。
在该窗口,有如下窗格:
图4- 视图对象窗格:在窗口的左侧。这是一个当前视图对象的层级列表。包括你的应用中的和系统产生的。
- Pixel Perfect放大镜窗格:在窗口中央。这是放大的屏幕图像。它被一个网格覆盖,网格的每个方块代表一个像素。点击一个方块,在底部会显示该像素的色值和坐标信息。
- Pixel Perfect窗格:在窗口右侧。这里展示了模拟器当前的屏幕显示。
使用Pixel Perfect叠加
你通常根据作为位图图像完成的设计构建UI。Pixel Perfect窗口可以帮助你加载一张图片叠加到当前的屏幕截图中。
使用步骤如下:
- 启动你的应用,导航到想要叠加的页面。
- 启动Hierarchy Viewer,导航到Pixel Perfect窗口。
- 点击顶部的Load Overlay。加载一张图片。
- Pixel Perfect窗格会显示叠加后的效果。
叠加的图像默认有50%的透明度,你可以通过底部的滑块进行修改。
默认情况下,叠加层也不会显示在“放大镜”窗格中。 要显示它,请在窗口顶部设置Show in Loupe。
点击Save as PNG时,叠加层不会保存到最终的图片上。
可能遇到的问题
Hierarchy Viewer连接设备失败
系统必须是开发版本,有root权限,且View Server开启。
检验一台手机是否开启了View Server的办法为:
adb shell service call window 3
若返回值是:
Result: Parcel(00000000 00000000 '........')
说明View Server处于关闭状态。
若返回值是:
Result: Parcel(00000000 00000001 '........')
说明View Server处于开启状态。
我们可以使用以下命令打开View Server:
adb shell service call window 1 i32 4939
使用以下命令关闭View Server:
adb shell service call window 2 i32 4939
注:本文翻译自Google官方文档。“Hierarchy Viewer连接设备失败”来自博友的博客http://www.cnblogs.com/fatfatdachao/p/4403282.html,仅记录一下