微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Android中,什么布局更快1. LinearLayout内部的FrameLayouts还是2.一个大的RelativeLayout?

我正在考虑视图的两种不同的布局安排(这将是RecyclerView中的一行).它们是不同的,但它们都可以起作用

>一个包含FrameLayouts行的容器垂直LinearLayout,例如LinearLayout – > FrameLayouts – >内容
>一个包含所有其他视图的大型RelativeLayout(没有FrameLayouts,但是包含所有TextView,Buttons等),例如RelativeLayout – >内容

现在我想知道:在布局性能方面哪一个会更好?

我的理解是RelativeLayout必须被测量两次因此非常慢,而FrameLayout很快,并且LinearLayout在布局性能方面是可以的.在一种情况下,我只有一个缓慢的容器(RelativeLayout – > Content),另一个我会有两个更快的容器(LinearLayout – > FrameLayouts – > Content).

解决方法

简答(TLDR):

如果你真的知道自己在做什么,那么RelativeLayouts可以更快.
如果你不这样做,它们会慢得多.

答案很长:

手动嵌套布局(如LinearLayout中的FrameLayout)与使用RelativeLayout中的相对定位可以有任何优缺点.

成本是计算动态大小,例如“wrap_content”,它必须根据孩子的需要或父母的要求约束而扩展.这导致因子计算问题随着深度而增加.

使用嵌套视图进行手动定位会增加级别.水平越浅越好但仍然有效.因此,从字面上看,工作量是您的水平深度的因子,如上所述.
例如:
A嵌套在Root下.
B嵌套在A.下
C嵌套在B.下
A影响Root的宽度.
B会影响影响Root的A.
C影响影响A的B,影响Root.

通过使一个视图位置本身相对于另一个视图位置本身的相对定位与动态大小计算方面的嵌套视图相同,因为必须在考虑另一个的情况下计算每个关系.
例如:

A留给Root.
B是A的左边.
C是B的左边.
虽然A,B,C都存在于Root下,但动态测量结果如下:
A影响Root的宽度.
B会影响影响Root的A.
C影响影响A的B,影响Root.

换句话说,您进行了相同的因子计算.

因此,唯一真正的区别在于RelativeLayouts可以以更复杂的XML为代价,更好地控制相对位置.

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐