2017-03-02 77 views
0

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

<FrameLayout> 
<FrameLayout> 
    <FrameLayout> 
    ...(almost 100 for example) 
    <FrameLayout/> 
<FrameLayout/> 
<FrameLayout/> 

平板布局例子:

<FrameLayout> 
    <FrameLayout/> 
    <FrameLayout/> 
    ...(almost 100 for example) 
<FrameLayout/> 
  • Q1:哪些人会来得更快
  • Q2:什么是最耗时的部分为更慢?

回答

0

Q1:第二个样本会更快,因为它有更少的列弗ELS。

documentation

性能可能会被压扁的布局,使布局浅而宽,而不是窄而深的提高。

Q2:

通常,骨架执行布局或测量阶段在一个单一的通和相当快。但是,对于一些更复杂的布局情况,框架可能需要在层次结构的多个部分迭代多次,最终定位元素之前需要多次传递才能解析。不得不执行多个布局和度量迭代被称为双重征税。

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

documentation

0

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

深视图层次的问题是,一个ViewGrouponLayoutonMeasure通常必须遍历所有孩子的View S,可能不止一个时间(如果你检查代码为RelativeLayout.onMeasure,比如,你可以看到它可能会发生很多次)。现在,如果每个ViewGroup迭代至少两次所有子级,并且其每个子级至少重复两次所有子级,则视图层级中的迭代总量将呈指数增长。

这也是为什么你宁愿原因FrameLayout在可能的情况,是因为它的位置机制是非常容易的,它并不需要重复很多次所有子View小号