gpt4 book ai didi

android - 在 Android 中,什么布局更快 1. LinearLayout 内的 FrameLayouts 或 2. 一个大的 RelativeLayout?

转载 作者:太空宇宙 更新时间:2023-11-03 12:17:48 25 4
gpt4 key购买 nike

我正在考虑一个 View 的两种不同布局安排(这将是 RecyclerView 中的一行)。它们是不同的,但它们都可以作为

  1. 一个容器垂直 LinearLayout 包含多行 FrameLayout,例如LinearLayout -> FrameLayouts -> 内容
  2. 一个包含所有其他 View (没有 FrameLayouts 但所有 TextViews、Buttons 等)的大 RelativeLayout,例如相对布局 -> 内容

现在我想知道:就布局性能而言,哪个更可取?

据我了解,RelativeLayout 必须测量两次,因此非常慢,而 FrameLayout 很快,而 LinearLayout 在布局性能方面还可以。在一种情况下,我只会有一个慢速的容器(RelativeLayout -> Content),在另一种情况下,我会有两个更快的容器(LinearLayout -> FrameLayouts -> Content)。

最佳答案

简答题(TLDR):

如果您真的知道自己在做什么,RelativeLayouts 会更快。如果不这样做,它们可能会慢得多。

长答案:

在 LinearLayout 中手动嵌套布局(例如 FrameLayout)与在 RelativeLayout 中使用相对定位各有利弊。

成本在于计算动态大小,例如“wrap_content”,它必须根据 child 的需要扩展或根据 parent 的要求进行限制。这会导致随深度增加的阶乘计算问题。

使用嵌套 View 手动定位会增加层级。水平越浅越好,但仍然有效。因此,从字面上看,工作量是如上所述的关卡深度的阶乘。例如:A 嵌套在 Root 下。B嵌套在A之下。C嵌套在B下。A影响根的宽度。B 影响 A,A 影响根。C 影响 B,B 影响 A,A 影响 Root。

通过使一个 View 自身相对于另一个 View 定位的相对定位在动态大小计算方面与嵌套 View 相同,因为每个关系都必须在考虑另一个关系的情况下进行计算。例如:

A 在 Root 的左边。B离开了A。C离开了B。虽然 A、B、C 都位于 Root 下,但动态测量的发生方式如下:A影响根的宽度。B 影响 A,A 影响根。C 影响 B,B 影响 A,A 影响 Root。

换句话说,您进行了相同的阶乘计算。

所以唯一真正的区别是 RelativeLayouts 以更复杂的 XML 为代价让您更好地控制相对位置。

另一方面,仔细使用根据设备属性提前计算的@dimens,可以避免动态计算,如果使用得当,RelativeLayouts 在需要复杂定位时可以比任何其他布局更高效.

关于android - 在 Android 中,什么布局更快 1. LinearLayout 内的 FrameLayouts 或 2. 一个大的 RelativeLayout?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28607737/

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