8

我试图理解层次结构视图。

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

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

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

红色:对于这部分渲染时间,此视图是树中最慢的视图。例如,绘制时间的红点表示该视图在树中的所有视图对象中绘制时间最长。

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

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

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

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

4

1 回答 1

3

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

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

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

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

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

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

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

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

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

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

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

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

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

于 2015-09-08T17:00:00.683 回答