2013-07-26 66 views
31

我正在製作一個應用程序,它可能會爲我節省一些時間 有幾個活動的單個佈局,其中一些視圖設置爲GONE,具體取決於正在使用哪個活動。「GONE」視圖是否對性能不利?

我知道在一個佈局中有大量的視圖會導致糟糕的性能。如果我有一個有大量觀點的活動,但是這些觀點中有很大一部分是去的,這個活動是否仍然表現不佳。也就是說,設置爲「無效」的觀點是否會造成業績惡化?如果是,他們是否要求處理能力低於VISIBLE或INVISIBLE視圖?

謝謝!

+6

這些視圖仍然需要充氣,它們將佔用內存,但它們不會成爲視圖層次結構的測量和佈局過程的一部分。 – Luksprog

+0

+1,另外 - 考慮一下,你只是修改它的視覺方面,可見或不可見,消失在本質上幾乎是一樣的,只是不佔用屏幕上的「物理」空間。 – g00dy

+0

我可以問,爲什麼你不使用不同的佈局,如果一些'活動'會有大量的'GONE'視圖? – codeMagic

回答

22

你應該知道了VS無形第一件事:

  • View.GONE這種觀點是不可見的,並且它不採取任何空間佈局的目的。
  • View.INVISIBLE該視圖是不可見的,但仍佔用空間用於佈局目的。

考慮對測量的影響。 哪一個更有效率取決於您改變視圖的可見性 。

例如,如果視圖是不可見的大部分時間, 使其GONE很可能會更有效,因爲系統 不會受到不必要的測量和鋪設出你看不見的看法 每當它需要調整屏幕上的其他視圖。另一方面,如果視圖頻繁地在可見和不可見 之間變化,您可能會從INVISIBLE獲得更好的性能,因爲您可能會在每次轉換時避免額外的度量/佈局。

9

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和使用parent.removeView(view)上有很多內存的視圖(如WebView);

+0

如何從View中清除內存使用者並使用View.GONE?在「WebView」的情況下,停止在其中呈現HTML或「ImageView」,以移除圖像。 –

+1

我不確定。 – anthonycr

相關問題