层级查看器已弃用。如果您使用的是 Android Studio 3.1 或更高版本,则应改用 布局检查器 在运行时检查应用的视图层级结构。要分析应用布局的渲染速度,请使用Window.OnFrameMetricsAvailableListener,如这篇博文中所述。
层级查看器是 Android 设备监控器 中内置的一个工具,它允许您测量布局层级结构中每个视图的布局速度。它可以帮助您查找由视图层级结构导致的性能瓶颈。
注意:层级查看器不再开发。要检查运行时视图层级结构中的属性,应改用 Android Studio 中的 布局检查器。但是,布局检查器目前不提供有关布局性能的分析详细信息。
此页面提供层级查看器的简介以及分析布局的分步指南。
开始设置
如果您使用的是 Android 模拟器,则可以跳过本节。否则,您需要按如下方式设置设备。
注意:您的设备必须运行 Android 4.1 或更高版本。
- 在您的设备上启用 开发者选项。
- 在您的开发机器上设置环境变量
ANDROID_HVPROTO=ddm
。此变量告诉层级查看器使用
ddm
协议连接到设备,这与 DDMS 协议相同。需要注意的是,主机上只能有一个进程连接到设备,因此您必须终止任何其他 DDMS 会话才能运行层级查看器。
启动层级查看器
- 将您的设备连接到计算机。如果设备上出现询问“允许 USB 调试?”的对话框,请点击确定。
- 在 Android Studio 中打开您的项目,构建并运行它 到您的设备上。
- 启动 Android 设备监控器。Android Studio 可能会显示一个禁用 adb 集成对话框,因为一次只能有一个进程通过 adb 连接到设备,而 Android 设备监控器正在请求连接。因此,请点击是。
图 1 说明了 Android 设备监控器中最初显示的内容。
- 在菜单栏中,选择窗口 > 打开透视图,然后点击层级视图。
您应该会看到类似于图 2 中所示的布局。如果不是,请选择窗口 > 重置透视图以返回到默认布局。
- 双击左侧窗口选项卡中应用的包名称。这会使用应用的视图层级结构填充窗格。
熟悉这些工具
层级查看器提供以下窗格(如图 2 所示)
- 树状视图(中心):显示视图层级结构的树状视图。您可以使用鼠标和底部的缩放控件来拖动和缩放树。每个节点都指示其
View
类名称和 ID 名称。 - 树状概览(右上方):提供应用完整视图层级结构的鸟瞰图。移动灰色矩形以更改在树状视图中可见的视口。
- 布局视图(右下方):显示布局的线框视图。当前选定视图的轮廓为红色,其父视图为浅红色。
在此处点击视图也会在树状视图中选择它,反之亦然。
视图层级结构是布局的快照,因此它不会自动更新。要更新层级视图,请点击重新加载视图层级结构 。
要使视图无效(在下次布局更新期间请求系统调用 onDraw()
),请在层级结构中选择一个视图,然后点击使布局无效 (这相当于在视图上调用 invalidate()
)。要请求视图(以及任何子视图)实际进行布局,请点击请求布局 。
如果导航到其他应用,则必须从左侧窗格的窗口选项卡中选择该应用以查看其视图层级结构。
要查看有关视图的详细信息,包括其测量、布局和绘制时间(如图 3 所示),请点击树状视图中的视图。双击视图以查看其放大的图像。
要查看视图的属性,请点击左侧窗格中的视图属性选项卡,如图 4 所示。
要将布局的分层屏幕截图保存到 Adobe Photoshop (PSD) 文件中,请点击工具栏中的捕获窗口层 。每个视图都将另存为其自己的图层,因此您可以轻松地通过隐藏和调整每个视图来创建新的模型。
分析布局
现在您已经了解了工具的使用方法,您可以使用它来分析视图层级结构并解释结果。
- 在树状视图或布局视图中,点击要分析其子视图的视图节点。
- 要开始分析,请点击获取布局时间 (位于树形视图顶部)。
对于大型视图层次结构,分析可能需要几秒钟。
您所选节点的每个子视图都会显示三个点,这些点可能是绿色、黄色或红色。
- 左侧的点表示渲染管道的绘制过程。
- 中间的点表示布局阶段。
- 右侧的点表示执行阶段。
这些点大致对应于处理管道的测量、布局和绘制阶段。点的颜色表示该节点相对于本地家族中所有其他已分析节点的相对性能。
- 绿色表示视图的渲染速度快于至少一半的其他视图。
- 黄色表示视图的渲染速度快于其他视图的下半部分。
- 红色表示视图属于渲染速度最慢的一半视图。
解读结果
层次结构查看器测量每个节点相对于同级视图的性能,因此配置文件中始终存在红色节点(除非所有视图的性能完全相同),并且它不一定表示红色节点的性能不佳(只是表示它是本地视图组中最慢的视图)。
层次结构查看器会对您的布局进行光栅化以获取时间信息。光栅化是将高级基元(例如圆形或矢量字体)转换为屏幕上的像素的过程。通常,光栅化由设备上的 GPU 执行,但在软件光栅化的情况下,渲染由 CPU 使用普通软件执行。这意味着报告的绝对时间彼此之间是正确的,但会膨胀并且会根据设备和开发机器上的整体和不断变化的 CPU 工作负载而有所不同。因此,它不反映设备上的实际性能速度,您应该多次进行分析以了解平均测量值。
在任何应用程序性能意外缓慢的情况下,红色节点都是潜在的问题。在相对设置中,始终存在最慢的节点;只需确保它是您期望的节点即可。以下示例说明了如何解读红色点。
- 查找叶节点或只有几个子节点的视图组中的红色点。这可能表明存在问题。您的应用可能不慢,或者它可能在您的设备上不慢,但您需要了解为什么该点是红色的。Systrace 或 Traceview 可以为您提供其他信息。
- 如果您有一个具有许多子节点且测量阶段为红色的视图组,请查看子节点以了解它们的性能。
- 具有黄色甚至红色点的视图在设备上可能不会运行缓慢。这就是实际数字有帮助的地方。Systrace 或 Traceview 可以为您提供其他信息。
- 如果层次结构的根视图的测量阶段为红色、布局阶段为红色且绘制阶段为黄色,这在某种程度上是典型的,因为它是所有其他视图的父级,并且只有在子级完成之后,它的布局才能完成。
- 如果具有 20 多个视图的树中的叶节点的绘制阶段为红色,这就是一个问题。检查您的
onDraw()
方法中是否存在不应该存在的代码。
有关更多布局提示,请参阅 提高布局性能。