我正在考虑两种不同的视图布局安排(这将是RecyclerView中的一行)。它们是不同的,但它们都会起作用,或者
一个包含框架布局行的容器垂直线性布局,例如线性布局->框架布局->内容
一个包含所有其他视图(没有框架布局,但是包含所有文本视图、按钮等)的大型relativelayout,例如relativelayout->content
现在我在想:在布局性能方面,哪一个更好?
据我所知,相对延迟必须测量两次,因此速度相当慢,而framelayout速度很快,linearlayout在布局性能方面可以。在一种情况下,我只有一个慢的容器(relativelayout->content),在另一种情况下,我有两个快的容器(linearlayout->framelayouts->content)。

最佳答案

简短回答(TLDR):
如果你真的知道你在做什么,相对的时间会更快。
如果你不这样做,他们会慢得多。
长回答:
手动嵌套布局,例如线性布局中的框架布局,与在相对布局中使用相对位置相比,这两种方式都有利弊。
成本是计算动态大小,如“包装内容”,必须根据其子级的需要进行扩展,或根据父级的要求进行限制。这会导致一个随深度增加的阶乘计算问题。
使用嵌套视图进行手动定位可提高级别。越浅的水平,越好,但仍然有效。因此,字面上的工作量是你的水平深度的因子,如上所述。
例如:
a嵌套在根目录下。
B嵌套在A下面。
c嵌套在b之下。
影响根的宽度。
b影响a影响根。
c影响b影响a影响根。
在动态调整大小计算中,通过使一个视图位置本身相对于另一个视图的相对定位与嵌套视图的相对定位相同,因为每个关系必须在计算时考虑到另一个关系。
例如:
A是根的左边。
B在A的左边。
C在B的左边。
当a,b,c都生活在根下时,动态测量发生如下:
影响根的宽度。
b影响a影响根。
c影响b影响a影响根。
换言之,发生了相同的阶乘计算。
因此,唯一真正的区别是relativeLayout让您以更复杂的XML为代价更好地控制相对位置。
另一方面,通过谨慎使用基于设备属性提前计算的@dimen,可以避免动态计算,如果使用得当,在需要复杂定位时,相对布局的性能比任何其他布局都要高。

07-28 00:42
查看更多