我正在尝试理解层次结构视图。
所以我正在阅读developer.android.com三点的含义:
绿色:对于渲染时间的这一部分,此视图速度更快 树中所有View对象的50%。例如,绿点 测量时间意味着此视图的测量时间比测量时间快 树中50%的View对象。
黄色:对于这一部分 渲染时间,此视图位于所有View对象中较慢的50% 那个树。例如,布局时间的黄点表示 此View的布局时间比50%的View对象慢 树。
红色:对于渲染时间的这一部分,此视图是最慢的 一个在树上。例如,绘制时间的红点表示 此视图占用的时间最多,可以绘制所有View对象 树。
如果我没有弄错的话,这并不意味着最多应该有3个带红点的视图(每个类别的最慢视图:测量,布局,绘图),然后一半视图黄色和一半绿色。
首先,我看到超过3个带有红点的视图,我不明白为什么。
其次,考虑到这些值是相对值,我看不出这些值如何有助于提高性能。总有一半的观点比另一半更快。
在树视图中,我看到visibility gone
的视图占用时间很短。不应该完全忽视GONE的观点吗?
答案 0 :(得分:3)
如果我没有弄错,那并不意味着应该总是在 最多3个带红点的视图
你的逻辑很好,但文档不能说树而是节点。用于获取这3个点的层次结构查看器的tool4s函数是Profile Node
,这将开始将树从所选节点(树的任意根)到树的末尾进行分析。
每个View
,包含多个视图的ViewGroup
(layouts are based on ViewGroup)都会有点。在相反的情况下,没有点。
所以只能在节点级别进行比较,而不是对所有树进行比较,这就是为什么你可以为所有树获得更多的三个红点(一个用于测量,一个用于布局,一个用于绘制),但不是节点。
其次,我不知道这些价值观如何有助于提高绩效 考虑到这些是相对值。总会有一半 这些观点比另一半更快。
点可以帮助您了解视图组中哪个视图最慢的测量/布局/绘制。为了避免屏幕冻结,操作总数必须低于16.6ms(android应该保持每秒60帧的帧速率)。
红点只会给你一个关于你应该分析哪个视图的提示,但这并不意味着视图没有优化,特别是对于有很多孩子的复杂层次结构。
此外,如果您必须构建自定义视图,层次结构查看器可以帮助您了解您是否正确地进行了快速渲染。
我看到
visibility gone
的观看次数很少。 不应该完全忽略GONE观点吗?
可见度设置为View
的{{1}}不会通过GONE
,onMeasure
和onLayout
。如果您像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