RelativeLayout 比 LinearLayout 更昂贵吗?

每当我需要一个 View 容器时,我总是使用 RelativeLayout,因为它的灵活性,即使我只是想显示一些非常简单的东西。

从性能/良好实践的角度来看,这样做可以吗? 还是应该尽可能使用 LinearLayout?

谢谢!

48761 次浏览

除非你布局了大量的视图(例如在 ListView 中) ,否则在 LinearLayout 和 RelativeLayout 之间进行选择的性能是可以忽略不计的。选择最方便使用的工具,只有在需要时才考虑性能。

下面是关于 Creating Efficient Layouts的官方文档对 RelativeLayout 和 LinearLayout 性能的描述:

坚持基本特征是 不幸的是,不是最有效率的 创建用户界面的方法 常见的例子是滥用 LinearLayout,它将导致一个 proliferation of views in the view 每一种观点ーー或者更糟, 每一个布局管理器ーー你添加到 你的申请是有代价的: 初始化、布局和绘图 变得更慢。布局通行证可以 特别是当你筑巢的时候 使用 权重参数,该参数需要 要测量两次的孩子。

在 Google I/O 2013(为 Android 编写自定义视图)的一次演讲中,Romain Guy 澄清了导致每个人都开始使用 RelativeLayouts 的误解。RelativeLayout 总是要做两次度量传递。总的来说,只要视图层次结构简单,它就可以忽略不计。但是,如果您的层次结构很复杂,那么执行额外的度量传递可能相当昂贵。另外,如果您嵌套 RelativeLayouts,您将得到一个指数度量算法。

Https://www.youtube.com/watch?v=nytb6mlu7va&t=1m41s

https://www.youtube.com/watch?v=NYtB6mlu7vA&t=38m04s

你可以试试

<LinearLayout>
<ViewPager/><!--Loading images from net, it is very good as a testing case.-->
<ViewPagerIndicator/>
<TextView/> <!--Show some info about page-->
</LinearLayout>


<RelativeLayout>
<ViewPager/><!--Loading images from net, it is very good as a testing case.-->
<ViewPagerIndicator below="id of ViewPager"/>
<TextView below="id of ViewPagerIndicator"/> <!--Show some info about page-->
</RelativeLayout>

你会发现有很多不同的,如果你的网页加载一些图片从互联网上。在这种情况下,LinearLayout 比 RelativeLayout 好100% 。

Relativelayout is more effective than Linearlayout.

来自 给你:

使用基本布局结构可以获得最高效的布局,这是一个常见的误解。但是,添加到应用程序中的每个小部件和布局都需要初始化、布局和绘图。例如,使用 LinearLayout 的嵌套实例会导致视图层次结构过深。此外,嵌套使用 layweight 参数的 LinearLayout 的几个实例可能特别昂贵,因为每个子级需要测量两次。当布局反复充气时,例如在 ListView 或 GridView 中使用时,这一点尤其重要。

2018年更新: 在 Android 的 N 版本中,ConstraintLayout类提供了类似于 RelativeLayout的功能,但是成本显著降低。它是一个非常强大的布局管理器,只要需要构建一个复杂的 GUI,就应该使用它。