2015-09-04 12 views
8

我想了解层次结构视图。层次结构查看器中的度量,布局和绘制时间(更好)解释

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

绿色:对于渲染时间这部分,这个观点是在树中的所有视图对象的快 50% 。例如,对于 ,绿色点表示测量时间意味着该视图的测量时间比树中View对象的50%更快。

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

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

如果我没有弄错,这并不意味着最多只能看到3个带红点的视图(每个类别的最慢视图:measure,layout,draw),然后是视图的一半黄色和半绿色。

首先,我看到超过3个红点的意见,我不明白为什么。

其次,我不明白这些值是如何帮助提高性能的,因为这些值是相对值。总会有一半的观点比另一半快。

然后看着树形图,我看到visibility gone的画有小的抽签时间。不应该完全忽略GONE观点?

回答

3

如果我没有记错,并不意味着,应该始终在 最多3红点

意见

你的逻辑是好的,但文档必须不说,但树在一个节点上。用于获取这3个点的层次结构查看器的tool4s函数是Profile Node,这将开始分析从选定节点(树的任意根)到树结尾的树。

每个View,变成一个ViewGrouplayouts are based on ViewGroup)其中包含多个视图,将有点。在相反的情况下,没有点。

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

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

点可以帮助您了解视图组内哪个视图是Measure/Layout/Draw最慢的视图。为了避免屏幕冻结,一个操作的总时间必须在16.6ms以下(android应该保持每秒60帧的帧速率)。

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

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

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

一个View具有可见性设置为GONE将无法​​通过onMeasureonLayoutonDraw去。如果你像TextView一样扩展一个小部件并用Log.d重写这些方法来知道发生了什么,那么你可以轻松地尝试它。

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

带有TextView的示例。通过Java构造public Text(Context context, AttributeSet attrs){...}创建对象的第一步),然后调用附加窗口将会protected void onAttachedToWindow() {...}进行,如果你想调试您更多的UI,尝试用手机能见度protected void onWindowVisibilityChanged(int visibility) {}

改变现在这在开发人员选项(不是所有手机都有)或模拟器中都有Debug GPU Overdraw选项。然后,您可以查看应用程序透支的位置,然后优化界面。 Debug GPU Overdraw walkthrough

+0

谢谢您花时间回答。但我不完全同意。他们明确地谈论这棵树。当然,从已经被点击的节点开始的树。我说的是,对于某棵树,我看到每个类别都有多个红点,并且这不应该发生。 – andrei

+0

@schopy您是否阅读过“使用层次结构查看器进行性能分析”https://developer.android.com/tools/ performance/hierarchy-viewer/profiling.html?他们写道:_点的颜色表示该节点相对于所有其他异形节点的相对性能._ – xiaomi

+0

是的。其他配置文件节点位于从单击节点开始的树中 – andrei