47

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

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

谢谢!

4

2 回答 2

36

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

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

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

例如,如果视图在大部分时间不可见,则将其设置为 GONE 可能会更有效,因为系统不会在需要调整屏幕上的其他视图时不必要地测量和布置您的不可见视图。

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

于 2013-07-26T14:15:26.723 回答
19

这是一个有趣的答案。我想知道和你一样的事情,答案是比简单地调用视图View.GONE消耗更多的内存。removeView(view)但是,视图确实比不需要绘制的GONE视图消耗更少的内存。View.VISIBLE

内存量比较如下:

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

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

于 2013-07-26T14:16:05.017 回答