RelativeLayout比LinearLayout更昂贵吗?

时间:2010-11-01 12:55:31

标签: android performance android-linearlayout android-relativelayout

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

是否可以这样做,或者我应该从性能/良好实践的角度尝试使用LinearLayout?

谢谢!

5 个答案:

答案 0 :(得分:144)

在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

答案 1 :(得分:51)

除非您正在布置大量视图(例如在ListView中),否则在LinearLayout或RelativeLayout之间进行选择的性能可以忽略不计。选择最适合工作的方式,只在需要时担心性能。

以下是Creating Efficient Layouts关于RelativeLayout和LinearLayout性能的官方文档:

  

坚持基本功能是   不幸的是,效率最高   创建用户界面的方法。一个   常见的例子是滥用   LinearLayout,导致a   视图中的视图泛滥   层次结构。每个观点 - 或更糟,   每个布局管理器 - 您添加到   您的申请需要付费:   初始化,布局和绘图   慢一点布局传递可以是   你筑巢时特别贵   几个使用的LinearLayout   重量参数,需要   孩子要两次测量。

答案 2 :(得分:2)

Relativelayout比Linearlayout更有效。

来自here

  

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

答案 3 :(得分:0)

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

答案 4 :(得分:-20)

你可以尝试

<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%。