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

时间:2015-09-04 13:16:23

标签: android hierarchyviewer

我正在尝试理解层次结构视图。

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

  

绿色:对于渲染时间的这一部分,此视图速度更快   树中所有View对象的50%。例如,绿点   测量时间意味着此视图的测量时间比测量时间快   树中50%的View对象。

     

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

     

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

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

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

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

在树视图中,我看到visibility gone的视图占用时间很短。不应该完全忽视GONE的观点吗?

1 个答案:

答案 0 :(得分:3)

  

如果我没有弄错,那并不意味着应该总是在   最多3个带红点的视图

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

每个View,包含多个视图的ViewGrouplayouts are based on ViewGroup)都会有点。在相反的情况下,没有点。

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

  

其次,我不知道这些价值观如何有助于提高绩效   考虑到这些是相对值。总会有一半   这些观点比另一半更快。

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

红点只会给你一个关于你应该分析哪个视图的提示,但这并不意味着视图没有优化,特别是对于有很多孩子的复杂层次结构。

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

  

我看到visibility gone的观看次数很少。   不应该完全忽略GONE观点吗?

可见度设置为View的{​​{1}}不会通过GONEonMeasureonLayout。如果您像TextView一样扩展窗口小部件并使用Log.d覆盖这些方法以了解发生的情况,则可以轻松尝试。

但我想抽奖的时间是因为视图会被创建,然后附加到窗口并最终改变其可见性。

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

更改可见性

现在,如果您想调试更多的U.I.,请尝试使用选项protected void onWindowVisibilityChanged(int visibility) {}的手机进入开发者选项(并非所有手机都有)或使用模拟器。然后,您可以查看应用程序的透支方式,然后优化您的界面。 Debug GPU Overdraw walkthrough