如果我没有记错,并不意味着,应该始终在 最多3红点
意见
你的逻辑是好的,但文档必须不说,但树在一个节点上。用于获取这3个点的层次结构查看器的tool4s函数是Profile Node
,这将开始分析从选定节点(树的任意根)到树结尾的树。
每个View
,变成一个ViewGroup
(layouts are based on ViewGroup)其中包含多个视图,将有点。在相反的情况下,没有点。
所以比较只能在节点层次上进行,而不是在所有树上进行,这就是为什么您可以为所有树获得更多三个红点(一个用于度量,一个用于布局,一个用于绘制) ,但不适用于节点。
其次,我不明白这些值如何帮助提高性能 考虑到这些是相对值。总会有一半的视图比另一半快。
点可以帮助您了解视图组内哪个视图是Measure/Layout/Draw最慢的视图。为了避免屏幕冻结,一个操作的总时间必须在16.6ms以下(android应该保持每秒60帧的帧速率)。
红点只会给你一个关于你应该剖析哪个视图的提示,但这并不意味着视图没有被优化,特别是对于有很多孩子的复杂层次结构。
此外,如果您必须构建自定义视图,层次结构查看器可以帮助您了解您是否正确进行快速渲染。
我看到visibility gone
的抽样时间很短。 不应该完全忽略GONE视图吗?
一个View
具有可见性设置为GONE
将无法通过onMeasure
,onLayout
和onDraw
去。如果你像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
谢谢您花时间回答。但我不完全同意。他们明确地谈论这棵树。当然,从已经被点击的节点开始的树。我说的是,对于某棵树,我看到每个类别都有多个红点,并且这不应该发生。 – andrei
@schopy您是否阅读过“使用层次结构查看器进行性能分析”https://developer.android.com/tools/ performance/hierarchy-viewer/profiling.html?他们写道:_点的颜色表示该节点相对于所有其他异形节点的相对性能._ – xiaomi
是的。其他配置文件节点位于从单击节点开始的树中 – andrei