【问题标题】:Are "GONE" views detrimental to performance?“GONE”视图是否对性能有害?
【发布时间】:2013-07-26 20:32:17
【问题描述】:

我正在制作一个应用程序,它可能会为我节省一些时间 为多个活动设置一个布局,其中一些视图设置为 GONE,具体取决于正在使用的活动。

我知道布局中有大量视图会导致性能下降。如果我有一个有大量视图的活动,但这些视图中的很大一部分已经消失,那么这个活动是否仍然表现不佳。也就是说,设置为 GONE 的视图是否会导致性能恶化?如果是,它们是否需要比可见或不可见视图更少的处理能力?

谢谢!

【问题讨论】:

  • 这些视图仍然需要膨胀,它们会占用内存,但它们不会成为视图层次结构的测量和布局过程的一部分。
  • +1 除此之外 - 想想看,你只是在修改它的视觉方面,可见或不可见,消失本质上几乎相同,只是不占用“物理”屏幕上的空间。
  • 如果某些Activities 将拥有大量GONE 的视图,我能问一下您为什么不使用不同的布局吗?
  • 老实说,这更像是假设性的。布局不一定有太大差异。我想我(在这个应用程序中)很多 GONE 视图的主要用途是注释输入表单,以向用户解释他们的输入失败的原因。我只是想把我的问题说清楚。
  • @user2120647 好的,这是一个很好的问题,我只是想确保您没有试图让事情变得比需要的更难。

标签: android layout android-view


【解决方案1】:

关于消失与隐形,你应该知道的第一件事:

  • View.GONE 该视图是不可见的,它不占用任何空间用于布局。
  • View.INVISIBLE 此视图是不可见的,但仍会占用空间用于布局。

考虑对测量的影响。 哪个更有效取决于您的频率 更改视图的可见性。

例如,如果视图大部分时间不可见, 让它 GONE 可能会更有效,因为系统 不会不必要地测量和布置你的隐形视图 每当需要调整屏幕上的其他视图时。

另一方面,如果视图在可见和不可见之间变化 通常,您可能会从 INVISIBLE 获得更好的性能 可能会避免在每次转换时额外测量/布局。

【讨论】:

    【解决方案2】:

    Here is an interesting answer。我想知道和你一样的事情,答案是View.GONE 比简单地在视图上调用removeView(view) 消耗更多的内存。但是,GONE 视图确实比 View.VISIBLE 消耗更少的内存,因为它们不需要绘制。

    内存量比较如下:

    View.VISIBLE > View.GONE > removing the view from the container

    我所做的是在不消耗大量内存的视图(如 TextView)上使用 View.GONE,在内存很大的视图(如 WebView)上使用 parent.removeView(view)

    【讨论】:

    • View 中清除内存消费者并使用View.GONE 怎么样?对于WebView,停止在其中渲染HTML,或者ImageView,删除图像。
    • 我不确定。
    猜你喜欢
    • 2012-11-24
    • 2019-06-22
    • 2023-03-16
    • 1970-01-01
    • 2014-08-18
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    相关资源
    最近更新 更多