web-dev-qa-db-ja.com

「GONE」ビューはパフォーマンスに悪影響を及ぼしますか?

使用されているアクティビティに応じて一部のビューがGONEに設定され、複数のアクティビティに対して単一のレイアウトを使用することで時間を節約できるアプリを作成しています。

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

ありがとう!

39

消えたvs見えないことについて最初に知っておくべきこと:

  • View.GONEこのビューは非表示であり、レイアウトのためにスペースを取りません。
  • View.INVISIBLEこのビューは非表示ですが、レイアウトのためにスペースを占有します。

測定への影響について考える。どちらがより効率的かは、ビューの可視性を変更する頻度によって異なります。

たとえば、ビューがほとんどの時間表示されない場合、システムが画面上の他のビューを調整する必要があるときに不必要に非表示のビューを測定してレイアウトすることがないため、ビューをGONEにする方がおそらく効率的です。

一方、ビューが表示と非表示の間で頻繁に変わる場合は、遷移ごとに余分なメジャー/レイアウトを回避できる可能性があるため、INVISIBLEのパフォーマンスが向上する可能性があります。

28
MSA

ここに興味深い答えがあります 。私はあなたと同じことを考えていました、そして答えは_View.GONE_が単にビューでremoveView(view)を呼び出すよりも多くのメモリを消費するということです。ただし、GONEビューは、描画する必要がないため、_View.VISIBLE_よりも少ないメモリを消費します。

メモリ量は次のように比較されます。

_View.VISIBLE_> _View.GONE_> _removing the view from the container_

私がやっていることは、メモリをあまり消費しないビュー(TextViewなど)では_View.GONE_を使用し、メモリを大量に消費するビュー(WebViewなど)ではparent.removeView(view)を使用することです。

16
anthonycr