【问题标题】:Performance of a big layout with many View.GONE views具有许多 View.GONE 视图的大布局的性能
【发布时间】:2017-04-26 12:08:22
【问题描述】:

我创建了一个非常大的布局(大约 2000 行),其中包含大量视图和子布局,通常带有加权度量。这棵树非常复杂,可以嵌套 8 层或更多层。 为了创建不同的“视角”,该应用程序以编程方式将一些视图的可见性设置为 View.GONE,特别是那些位于我不想显示的视图树头的视图,在不同的时刻应用程序生命周期,有时会更改权重以调整视图大小;因此,显示给用户的最终布局每次包含的视图和视图树不超过主布局中的 1/3。

我不关心“切换”时的性能,所以当用户从一个视角切换到另一个视角时,我有足够的时间来打开和关闭可见性,这不是问题。

相反,将这么多视图和视图树设置为 View.GONE 会影响运行时的性能吗?与显示所有视图的较小布局(可能以编程方式膨胀)相比,GONE 视图对 CPU 和内存性能有何影响?

【问题讨论】:

  • 它会影响性能,尤其是低规格设备。如果您必须像您所说的那样创建繁重的布局,请使用约束布局。它比相对布局更灵活。
  • 约束布局可能会略有改进,但我认为真正的问题可能是其父级设置为 GONE 的视图树:它们是如何被处理的,就像死对象一样,或者它们仍然是“还活着吗?
  • 我认为 GONE 布局仍然有影响。你不能为此制作不同的片段吗?

标签: android performance android-layout layout


【解决方案1】:

其实在创建复杂的布局时,必须使用约束布局。

ConstraintLayout 允许您创建具有平面视图层次结构(无嵌套视图组)的大型复杂布局。它与RelativeLayout 类似,所有视图都根据兄弟视图和父布局之间的关系进行布局,但它比RelativeLayout 更灵活,更易于与Android Studio 的布局编辑器一起使用。

请从 url 中找到文档:

https://developer.android.com/training/constraint-layout/index.html

【讨论】:

  • 是的,正如我对 Divyesh Patel 所说,这是一个很好的建议,但真正的问题可能是其父级设置为 GONE 的视图树:它们如何被视为死对象,或者他们还“活着”吗?
  • 是否可以在您的要求中使不可见而不是消失?
  • 否,因为可见视图取代了消失的视图。例如,在某些情况下,可能有 4 个视图以交叉方式组织,其他时候,6 个视图组织为水平布局
  • 尝试使用权重,例如:6 个视图是布局权重为 6。如果你想去,把布局重量为零。我认为这会有所帮助
  • 内部约束布局必须与权重一起使用。会更好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-24
  • 2012-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多