层次结构查看器中的度量,布局和绘制时间(更好)说明

and*_*rei 8 android hierarchyviewer

我试图了解层次结构视图.

所以我在developer.android.com上阅读三个点的含义:

绿色:对于渲染时间的这一部分,此视图占树中所有View对象的50%.例如,测量时间的绿点表示此视图的测量时间比树中View对象的50%快.

黄色:对于渲染时间的这一部分,此视图位于树中所有View对象的较慢50%中.例如,布局时间的黄点表示此视图的布局时间比树中View对象的50%慢.

红色:对于渲染时间的这一部分,此视图是树中最慢的视图.例如,绘制时间的红点表示此视图占用树中所有View对象的最多时间.

如果我没有弄错的话,这并不意味着最多应该有3个带红点的视图(每个类别的最慢视图:测量,布局,绘制),然后一半视图黄色和半绿色.

首先,我看到超过3个带有红点的视图,我不明白为什么.

其次,考虑到这些值是相对值,我看不出这些值如何有助于提高性能.总有一半的观点比另一半更快.

看着树视图我看到的视图visibility gone有一个小的绘制时间.不应该完全忽视GONE的观点吗?

xia*_*omi 3

如果我没记错的话,这是否意味着最多应该有 3 个带有红点的视图

你的逻辑很好,但是文档不能说是树,而是说是一个节点。用于获取这 3 个点的层次结构查看器的 tool4s 功能是Profile Node,这将开始分析从所选节点(树的任意根)到树的末尾的树。

每个View包含多个 View 的ViewGroup布局基于 ViewGroup)都会有点。在相反的情况下没有点。

因此,仅在节点级别进行比较,而不是对所有树进行比较,这就是为什么您可以为所有树获得三个以上的红点(一个用于测量,一个用于布局,一个用于绘制),但不能为一个节点。

其次,考虑到这些值是相对值,我不明白这些值如何帮助提高性能。总会有一半的浏览速度比另一半快。

点可帮助您了解视图组中的哪个视图测量/布局/绘制最慢。为了避免屏幕冻结,一次操作的总时间必须低于 16.6 毫秒(Android 应保持每秒 60 帧的帧速率)。

红点只会提示您应该分析哪个视图,但这并不意味着视图没有优化,尤其是在具有大量子视图的复杂层次结构中。

此外,如果您必须构建自定义视图,层次结构查看器可以帮助您了解是否正确执行快速渲染。

我看到visibility gone的视图绘制时间很短。难道不应该完全忽略 GONE 视图吗?

View可见性设置为 的AGONE不会通过onMeasureonLayoutonDraw。如果您扩展一个像 TextView 这样的小部件并使用 Log.d 覆盖这些方法来了解会发生什么,您可以轻松地尝试它。

但我猜绘制的时间到来了,因为视图将被创建,然后附加到窗口并最终更改其可见性。

TextView 的示例。第一步,通过 java 构造函数创建对象public Text(Context context, AttributeSet attrs){...},然后执行附加窗口的调用protected void onAttachedToWindow() {...},并更改可见性protected void onWindowVisibilityChanged(int visibility) {}

现在,如果您想调试更多 UI,请尝试使用具有“开发人员选项”选项的手机Debug GPU Overdraw(并非所有手机都有该选项)或使用模拟器。然后您可以看到应用程序在哪里过度绘制,然后优化您的界面。 调试 GPU 过度绘制演练