Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android中嵌套布局最耗时的部分是什么?_Android - Fatal编程技术网

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

Android中嵌套布局最耗时的部分是什么?,android,Android,嵌套布局示例: <FrameLayout> <FrameLayout> <FrameLayout> ...(almost 100 for example) <FrameLayout/> <FrameLayout/> <FrameLayout/> <FrameLayout> <FrameLayout/> <FrameLayout/> ...(almost 10

嵌套布局示例:

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

…(例如将近100人)
平面布局示例:

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

…(例如将近100人)
  • 问题1:哪一个会更快
  • 问题2:对于速度较慢的用户来说,最耗时的部分是什么

Q1:第二个样本速度更快,因为它的水平更低

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

问题2:

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

因此,基本上,层次越高,就越复杂,就越有可能获得双重征税


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

深度视图层次结构的问题是,
ViewGroup
onLayout
onMeasure
通常必须迭代其所有子视图
view
s,可能不止一次(例如,如果您检查代码,您可以看到可能会发生多次)。现在,如果每个
ViewGroup
至少迭代其所有子对象两次,并且其每个子对象至少迭代其所有子对象两次,依此类推,则视图层次结构中的迭代总量将以指数形式增长

这也是您希望尽可能使用
FrameLayout
的原因,因为它的定位机制非常简单,并且不需要多次迭代其所有子视图
View
s