Hierarchy Viewer 已弃用。如果您使用的是 Android Studio 3.1 或更高版本,应改用 布局检查器 (Layout Inspector) 来检查应用在运行时的视图层级。要分析应用布局的渲染速度,请使用 Window.OnFrameMetricsAvailableListener,如这篇博文中所述。
Hierarchy Viewer 是一个内置于 Android 设备监视器 (Android Device Monitor) 中的工具,可让您测量布局层级中每个视图的布局速度。它可以帮助您找出由视图层级结构造成的性能瓶颈。
注意:Hierarchy Viewer 不再进行开发。要在运行时检查视图层级中的属性,应改用 Android Studio 中的 布局检查器 (Layout Inspector)。但布局检查器目前不提供有关布局性能的分析详细信息。
本页面介绍了 Hierarchy Viewer,并逐步指导您分析布局。
设置
如果您使用 Android 模拟器,可以跳过此部分。否则,您需要按如下方式设置设备。
注意:您的设备必须运行 Android 4.1 或更高版本。
- 在设备上启用开发者选项 (Developer Options)。
- 在您的开发机器上设置环境变量
ANDROID_HVPROTO=ddm
。此变量告知 Hierarchy Viewer 使用
ddm
协议连接到设备,这与 DDMS 协议相同。需要注意的是,主机上只能有一个进程连接到设备,因此您必须终止任何其他 DDMS 会话才能运行 Hierarchy Viewer。
启动 Hierarchy Viewer

图 1. Android 设备监视器 (Android Device Monitor)
- 将您的设备连接到计算机。如果设备上弹出对话框询问允许 USB 调试吗?,请点按确定。
- 在 Android Studio 中打开您的项目,并在设备上构建并运行它。
- 启动 Android 设备监视器 (Android Device Monitor)。Android Studio 可能会显示一个停用 adb 集成对话框,因为一次只能有一个进程通过 adb 连接到设备,并且 Android 设备监视器正在请求连接。因此请点击是。
图 1 显示了 Android 设备监视器最初显示的内容。
- 在菜单栏中,选择窗口 > 打开透视图,然后点击层级视图 (Hierarchy View)。
您应该看到类似于图 2 所示的排列方式。如果没有,请选择窗口 > 重置透视图以返回默认布局。
- 双击左侧窗口标签页中您应用的软件包名称。这将使用您应用的视图层级填充各个窗格。
熟悉工具

图 2. Hierarchy Viewer 窗格。
Hierarchy Viewer 提供以下窗格(如图 2 所示)
- 树状视图 (Tree View)(中央):显示您的视图层级的树状视图。您可以使用鼠标和底部的缩放控件拖动和缩放树。每个节点都指示其
View
类名和 ID 名称。 - 树状概览 (Tree Overview)(右上):为您提供应用完整视图层级的鸟瞰图。移动灰色矩形可更改树状视图中可见的视口。
- 布局视图 (Layout View)(右下):显示您布局的线框视图。当前选定视图的轮廓为红色,其父视图为浅红色。
在此处点击视图也会在树状视图中选中它,反之亦然。
视图层级是布局的快照,因此不会自动更新。要更新层级视图,请点击重新加载视图层级 。
要使视图失效(请求系统在下次布局更新期间调用 onDraw()
),请在层级中选择一个视图,然后点击使布局失效 (这等同于在该视图上调用
invalidate()
)。要请求视图(及其任何子视图)实际布局,请点击请求布局 。
如果您导航到另一个应用,必须从左侧窗格中的窗口标签页中选择该应用,才能查看其视图层级。
要查看有关视图的详细信息,包括其测量、布局和绘制时间(如图 3 所示),请点击树状视图中的视图。双击该视图可查看其放大图像。

图 3. 视图节点显示的一部分。
要查看视图的属性,请点击左侧窗格中的视图属性 (View Properties) 标签页,如图 4 所示。

图 4. 视图属性 (View Properties) 标签页的位置。
要将布局的分层屏幕截图保存到 Adobe Photoshop (PSD) 文件,请点击工具栏中的捕获窗口图层 。每个视图都保存为一个独立的图层,方便您通过隐藏和调整每个视图来轻松创建新的模拟图。
分析布局

图 5. 分析后的视图层级。
现在您已经熟悉该工具了,可以使用它来分析您的视图层级并解读结果。
- 在树状视图或布局视图中,点击您想要分析其子节点的视图节点。
- 要开始分析,请点击树状视图顶部的获取布局时间
。
对于大型视图层级,分析可能需要几秒钟。
您所选节点的每个子视图都会有三个点,可以是绿色、黄色或红色。
- 左边的点代表渲染管道的绘制过程。
- 中间的点代表布局阶段。
- 右边的点代表执行阶段。

图 6. 彩色点与
渲染管道的关系。
这些点大致对应处理管道的测量、布局和绘制阶段。点的颜色表示该节点相对于局部家族中所有其他已分析节点的相对性能。
- 绿色表示该视图的渲染速度快于至少一半的其他视图。
- 黄色表示该视图的渲染速度快于其他视图中较慢的那一半。
- 红色表示该视图属于速度最慢的那一半视图。
解读结果
Hierarchy Viewer 测量每个节点相对于同级视图的性能,因此分析结果中总会有红色节点——除非所有视图性能完全相同——红色节点不一定意味着性能不佳(仅表示它是局部视图组中最慢的视图)。
Hierarchy Viewer 对您的布局进行光栅化以获取计时信息。光栅化是将高级图元(例如圆形或矢量字体)转换为屏幕上像素的过程。通常,光栅化是由设备上的 GPU 完成的,但在软件光栅化的情况下,渲染是在 CPU 上通过普通软件完成的。这意味着报告的绝对计时信息是相对于彼此而言正确的,但会受到设备和开发机器上总体及变化的 CPU 负载影响而膨胀和变化。因此,它不能反映设备上的真实性能速度,您应该多次分析以了解平均测量结果。
在应用性能意外缓慢的任何情况下,红色节点都可能是一个潜在问题。在相对设定下,总会有一个最慢的节点;只需确保它是您预期的节点即可。以下示例说明如何解读红色点。
- 在叶节点或只有少数子节点的视图组中查找红色点。这可能指向一个问题。您的应用可能不慢,或者在您的设备上不慢,但您需要了解该点为何是红色。Systrace 或 Traceview 可以为您提供额外信息。
- 如果您有一个包含许多子节点的视图组,并且测量阶段显示为红色,请查看子节点,了解它们的性能如何。
- 带有黄色甚至红色点的视图在设备上可能并没有表现慢。这时实际的数字就很有帮助。Systrace 或 Traceview 可以为您提供额外信息。
- 如果层级的根视图测量阶段显示为红色、布局阶段显示为红色,绘制阶段显示为黄色,这在某种程度上是典型的,因为它所有其他视图的父视图,并且只有等子视图完成后其布局才完成。
- 如果一个包含 20 多个视图的树中的叶节点的绘制阶段显示为红色,这就是一个问题。检查您的
onDraw()
方法,查找不应该出现在那里的代码。
有关更多布局技巧,请参阅提升布局性能 (Improving Layout Performance)。