度量,布局和绘制时间在层次结构查看器(更好)解释

我想了解层次结构视图。

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

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

黄色:对于渲染时间的这一部分,该视图位于树中所有视图对象的较慢的50%。 例如,布局时间的黄点意味着该视图的布局时间比树中视图对象的50%要慢。

红色:对于渲染时间的这一部分,这个视图是树中最慢的一个。 例如,绘制时间的红点意味着该视图花费大量时间来绘制树中的所有视图对象。

如果我没有弄错,那不是说最多只有3个红点的视图(每个类别的最慢视图:度量,布局,绘制),然后一半的视图变成黄色,一半变成绿色。

首先我看到3个以上的红点,我不明白为什么。

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

看着树形视图,我看到visibility gone ,而且抽出时间很短。 不应该完全忽略GONE的观点?

Solutions Collecting From Web of "度量,布局和绘制时间在层次结构查看器(更好)解释"

如果我没有弄错的话,那不是说最多只有3个红点的意见

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

每一个View ,进入一个ViewGroup ( 布局是基于ViewGroup的 ),其中包含多个View,都会有点。 在相反的情况下,没有点。

所以比较只能在节点层次上进行,而不是在所有的树上进行,这就是为什么你可以为所有的树得到更多的三个红点(一个用于度量,一个用于布局,一个用于绘制),而不是一个节点。

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

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

红点只会给你提示你应该对哪个视图进行configuration,但是这并不意味着视图没有被优化,尤其是在一个复杂的层次上有很多的孩子。

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

我看到visibility gone时间很短。 不应该完全忽略GONE的观点?

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

但是我猜绘制时间是因为视图会被创build,然后附加到窗口并最终改变其可见性。

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

现在,如果你想debugging更多的用户界面,尝试使用Debug GPU Overdraw选项(不是所有的手机都有)或模拟器的手机。 然后,您可以看到应用程序在哪里透支,然后优化您的界面。 debuggingGPU透支