【问题标题】:Is a RelativeLayout more expensive than a LinearLayout?RelativeLayout 比 LinearLayout 贵吗?
【发布时间】:2011-05-03 09:54:57
【问题描述】:

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

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

谢谢!

【问题讨论】:

    标签: android performance android-linearlayout android-relativelayout


    【解决方案1】:

    在 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

    【讨论】:

    • 我知道这是一篇旧文章,但是在单个相对布局和 2-3 个线性布局之间进行选择时,您认为哪种解决方案成本最低?
    • 一个约束布局 :)
    【解决方案2】:

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

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

    坚持基本功能是 不幸的是不是最有效的 创建用户界面的方法。一种 常见的例子是滥用 LinearLayout,这导致 视图中的视图扩散 等级制度。每一个视图——或者更糟, 每个布局管理器——你添加到 您的申请是有代价的: 初始化、布局和绘图 变慢。布局通行证可以是 筑巢时特别贵 几个使用的 LinearLayout 权重参数,这需要 孩子要测量两次。

    【讨论】:

    【解决方案3】:

    相对布局比线性布局更有效。

    来自here

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

    【讨论】:

    • @phreakhead 你说得对,没有单一的“正确”解决方案。这就是为什么“正确”的解决方案几乎总是完全忘记性能,而是做最容易编写和阅读的事情。
    • 那句话不能支持你的陈述,这仅在一种情况下是正确的
    • 真正的事实是,设计你的布局总是试图最小化层次结构级别的数量(布局内部布局内部布局)并检查层次结构查看器工具以发现潜在问题。
    【解决方案4】:

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

    【讨论】:

    • 从最新版本开始变得非常非常慢
    • 这取决于它的使用方式。您应该避免绝对定位并使用约束。
    【解决方案5】:

    你可以试试

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 2011-01-05
      • 2013-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多