如果我没记错的话,这是否意味着应该始终最多有 3 个带有红点的视图
你的逻辑很好,但文件不能说树,而是在一个节点上。用于获取这 3 个点的层次结构查看器的 tool4s 功能是Profile Node
,这将开始从所选节点(树的任意根)到树的末尾剖析树。
每View
一个包含多个视图的ViewGroup
(布局基于 ViewGroup )都会有点。在相反的情况下,没有点。
因此,仅在节点级别进行比较,而不是针对所有树,这就是为什么您可以为所有树获得超过三个红点(一个用于测量,一个用于布局,一个用于绘制),但不能用于一个节点。
其次,考虑到这些值是相对值,我看不出这些值如何有助于提高性能。总是有一半的浏览量比另一半快。
点可帮助您了解视图组中的哪个视图测量/布局/绘制最慢。为避免屏幕冻结,一次操作的总时间必须在 16.6 毫秒以下(android 应保持每秒 60 帧的帧率)。
红点只会提示您应该分析哪个视图,但这并不意味着视图没有优化,尤其是在具有大量子级的复杂层次结构中。
此外,如果您必须构建自定义视图,层次结构查看器可以帮助您了解您是否正确地进行了快速渲染。
我看到的视图visibility gone
有很短的绘制时间。不应该完全忽略 GONE 视图吗?
View
具有可见性设置为的AGONE
不会通过onMeasure
,onLayout
和onDraw
。如果您扩展像 TextView 这样的小部件并使用 Log.d 覆盖这些方法以了解发生了什么,您可以轻松地尝试它。
但我想绘制的时间来了,因为视图将被创建,然后附加到窗口并最终改变它的可见性。
带有 TextView 的示例。第一步,对象是通过 java 构造函数创建的public Text(Context context, AttributeSet attrs){...}
),然后将执行附加窗口的调用,protected void onAttachedToWindow() {...}
并更改可见性protected void onWindowVisibilityChanged(int visibility) {}
现在,如果您想调试更多用户界面,请尝试使用可以Debug GPU Overdraw
进入开发人员选项的手机(并非所有手机都有)或模拟器。然后,您可以查看应用程序在哪里过度绘制,然后优化您的界面。
调试 GPU Overdraw 演练