gpt4 book ai didi

android - Android布局真的很难成倍增长吗?

转载 作者:IT老高 更新时间:2023-10-28 21:53:03 28 4
gpt4 key购买 nike

一些常用的android布局,例如
RelativeLayout和LinearLayout(权重非零时)
具有可衡量其子女的onMeasure()实现
两次,导致嵌套时的指数运行时间。
通过发出日志条目可以很容易地验证这一点
从叶 subview 的onMeasure()...它被称为2depth
时代。
有人可以给出一个清晰而具体的描述来说明为什么吗?
最重要的是,这种指数行为是由于重要的一部分
整个契约(Contract),还是只是实现细节
可能会被优化掉?如果认为这是不可避免的,
请举一个需要它的例子。
这样的例子将极大地帮助我和其他人
谁在提示“让您的布局变浅”
任务繁重,谁在想
这是否仅仅是由驱动
核心库中尚未优化的算法,
还是真的有根本的困难
阻止修复。
也许一个最小的例子就是
另一个LinearLayout内的LinearLayout内的按钮的外观
(随处可见match_parent和weight = 1,以触发
完整的指数行为),
带有一些其他参数或情况
明确指出所有四个电话
确实对Button.onMeasure()有意义且必要。
我的第一个猜测是,只有两个线性时间
确实需要遍历-收集每个人的遍历的第一次遍历
首选尺寸,第二次遍历以分配松弛
和/或收缩。
世界上其他的布局引擎,例如Tex,Swing和HTML的布局引擎,
似乎能够例行地处理非常深的层次结构
有很多对齐约束和延伸,
没有任何指数级的爆炸,我想这就是它们的工作原理。
请注意,我不需要答案来解释
发生指数爆炸-我明白,
而且已经有几篇文章了
问和回答:

  • Why are nested weights bad for performance? Alternatives?
  • Android layout measuring time doubles with each step up the hierarchy
  • Layout Weight warning Nested weight bad performance
  • Efficiency of Android Layout hierarchy
  • http://android-developers.blogspot.com/2009/02/android-layout-tricks-1.html

  • 我的问题是递归双重测量是否
    从根本上是必要/合理的,
    如果是这样,我想要一个清楚的解释/示例来说明原因。
    编辑2013/8/22:我想也许我的问题仍然没有解决。
    这次,我将大胆地澄清和解释我的动机。
    布局不是一个成倍的难题,
    正如世界上高效的布局引擎所证明的那样,例如Tex,Swing和HTML的布局引擎。
    因此,LinearLayout发生了什么,
    以及Android开发者社区应如何应对?
    我问的不是本着责备的精神,
    而是了解并决定如何最好地前进。
    我可以想到4种可能性:
  • 修复核心库中的性能错误,而无需更改任何契约(Contract)
  • 根据需要更改契约(Contract),并修复
    核心库
  • 编写LinearLayout的替代方法,它有其必要的
    功能(即按指定比例在子级之间分配额外的空间),但没有性能错误,并将其用于新应用程序
  • 继续对我们的布局进行微管理,以解决
    在我们其他android开发事业中的性能错误。

  • (4)对我个人而言不是一个严肃的选择。
    此外,在我看来,很明显
    此时更改LinearLayout的行为是不切实际的,
    所以我也不相信(2)也是一个严肃的选择。
    剩下(1)和(3)。
    我有能力并且愿意亲自做任何一个,但是哪一个呢?
    显然,如果可能的话,(1)会更可取-那么,有可能吗?
    这似乎是需要解决的关键性阻碍问题
    为了确定前进的方向。
    我花了一些时间在核心代码中
    和文档并不清楚,
    所以这就是为什么我在这里问这个问题。

    最佳答案

    就两次测量 child 而言,我的理解是,这是LinearLayouts会发生的情况,尤其是在涉及权重时。我为此找到的最好的解释来自RomainGuy在他的一份演讲中。

    他对此有一张幻灯片,并在17:45对此进行了简短介绍。随意倒带以获取一些背景信息。您可以在此处找到我引用的视频:Devoxx'10 - Dive Into Android

    他基本上说的是,在第一遍中,他们根据LinearLayout的方向计算总宽度或高度,添加子项的权重,找出剩余的空间,然后在第二遍中,使用该信息能够适本地将所有剩余空间分配给所有 child 。很简单。

    我还想指出,是的,虽然确实如此,浅层布局层次结构对性能的影响较小,但如果仅添加1或2个额外的层,则可能不会对性能产生重大影响为用户。一旦布置好,就完成了。即使在ListView中,如果您正确使用给定的“convertView”并设置ViewHolder,您也将获得良好的性能。

    我建议您使用DDMS,并对某些Google应用进行布局转储。它们非常复杂,并且有时深度常常令人惊讶,但它们仍具有良好的性能。不要对您的布局感到愚蠢,但是如果它节省了您的时间,那么添加额外的布局并不是世界末日。

    关于android - Android布局真的很难成倍增长吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17493819/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com