2013-07-26 13 views
31

にはいくつかのアクティビティ用に1つのレイアウトがあり、使用されているアクティビティに応じてビューの一部がGONEに設定されることがあります。"GONE"ビューはパフォーマンスに悪影響を及ぼしますか?

レイアウトに多数のビューを表示すると、パフォーマンスが低下することがあります。多数のビューを持つアクティビティがあっても、そのビューの大部分がGONEになっていた場合、このアクティビティはまだパフォーマンスが低下しますか。つまり、GONEに設定されているビューはパフォーマンスの悪化につながりますか?はいの場合、VISIBLEまたはINVISIBLEビューよりも処理能力が低いと要求しますか?

ありがとうございます!目に見えない対なくなっについてあなたが知っておくべき

+6

これらのビューはまだ膨張している必要があり、メモリを占有しますが、ビュー階層の測定およびレイアウトプロセスの一部にはなりません。 – Luksprog

+0

+1それに加えて、それについて考えてみると、視覚的に見えているか見えていないか、実際には本質的に同じであり、画面上の「物理的」スペースを占有していないだけです。 – g00dy

+0

'アクティビティ 'の中に' GONE'というビューがたくさんある場合、レイアウトが違うのはなぜですか? – codeMagic

答えて

22

まず最初:

  • View.GONEこのビューには、目に見えない、そしてそれは、レイアウトの目的のために任意のスペースを取りません。
  • View.INVISIBLEこのビューは表示されませんが、レイアウトのためにまだスペースが必要です。

測定への影響を考えます。 どれが効率的かは、どれくらいの頻度で表示されるかによって異なります。 ビューの可視性を変更します。例えば

ビューは、大部分の時間のために表示されていない場合、それはする必要があるときはいつでもシステム が不あなたの目に見えないビュー を測定してレイアウトされないので、 はそれがなくなって作ることは、おそらく、より効率的です画面上の他のビューを調整します。

の表示が頻繁に表示と非表示に変化する場合は、 が各トランジションで余分な小節/レイアウトを避ける可能性があるため、INVISIBLEのパフォーマンスが向上する場合があります。

9

Here is an interesting answer。私はあなたと同じことを思っていましたが、その答えは、View.GONEは単にビューのremoveView(view)を呼び出すよりも多くのメモリを消費するということです。ただし、GONEビューは、描画する必要がないため、View.VISIBLEより少ないメモリを消費します。

メモリ量

は次のように比較します

View.VISIBLE>View.GONE>私は(TextViewのような)多くのメモリを消費しないビューにView.GONEを使用し、上parent.removeView(view)を使用しているかどうremoving the view from the container

多くのメモリであるビュー(WebViewなど)。

+0

'View'からメモリ消費者をクリアし、' View.GONE'を使うとどうでしょうか? 'WebView'の場合は、HTMLのレンダリングを停止するか、' ImageView'を実行してイメージを削除します。 –

+1

私はそれについては分かりません。 – anthonycr