Android中嵌套布局最耗时的部分是什么?

时间:2017-03-02 10:08:26

标签: android

嵌套布局示例:

if (correctSamplesDict.TryGetValue(sample.SampleName, out sampleProperties))
{
    foreach (Sample sampleValue in sampleProperties)
    {
        sampleValue.ProjectDate = sample.ProjectDate;
        sampleValue.ProjectNumber = sample.ProjectNumber;
        sampleValue.CustomerNumber = sample.CustomerNumber;
        sampleValue.RingNumber = sample.RingNumber;
        sampleValue.ScientificName = sample.ScientificName;
    }
}

Flat Layout Sample:

<FrameLayout>
 <FrameLayout>
  <FrameLayout>
   ...(almost 100 for example)
  <FrameLayout/>
 <FrameLayout/>
<FrameLayout/>
  • Q1:哪一个会更快?
  • Q2:慢一点最耗时的部分是什么?

2 个答案:

答案 0 :(得分:0)

Q1:第二个样本会更快,因为它的级别较低。

documentation

  

通过展平布局可以提高性能 - 使布局浅而宽,而不是窄而深。

Q2:

  

通常,框架会在一次通过中非常快速地执行布局或测量阶段。但是,对于一些更复杂的布局情况,框架可能必须在层次结构的部分上多次迭代,这需要多次传递以在最终定位元素之前解析。必须执行多个布局和度量迭代才称为双重征税。

所以基本上布局越多,层次越复杂,获得双重征税的机会就越多。

documentation

答案 1 :(得分:0)

第二种情况应该在理论上至少更好。

深层次结构层次结构的问题是,ViewGroup onLayoutonMeasure通常必须迭代他们所有的孩子View,可能更多比一次(如果你检查RelativeLayout.onMeasure的代码,你可以看到它可能会发生多次)。现在,如果每个ViewGroup至少迭代其所有子节点的两倍,并且其每个子节点至少迭代其所有子节点的两次,依此类推,则视图层次结构中的迭代总量呈指数级增长。

这也是你在可能的情况下更喜欢FrameLayout的原因,因为它的位置机制非常简单,并且它不需要多次迭代它的所有子View s < / p>