18

リストビューの各行に約10個のImageButtonが含まれるListViewがあります。これらのボタンのほとんどは可視性 = なくなっており、非常にまれなシナリオでのみ表示されます。これらの ImageButtons を ViewStubs に置き換えて、リストビューのすべての行に対して常にそれら (およびそれらに含まれる画像) を読み込まないようにする価値があるかどうか疑問に思っています。次に、再び可視性が「Gone」に設定されているため、ロードがどのような影響を与えるかわかりません。それらの画像は実際に読み込まれるかどうか?

たとえば、8 つの ImageButton を 1 つではなく 8 つの ViewStub に置き換えることについて話していることに注意してください。

乾杯

4

7 に答える 7

11

AViewStubdumb and lightweightビューです。ありno dimension、何も描画せず、レイアウトにはまったく関与しません。これは、がビュー階層ViewStubに非常に含まれていることを意味します。cheap to inflate and very cheap to keepViewStubとして最もよく説明できますlazy include。によって参照されるレイアウトViewStubinflated and added、ユーザー インターフェースのみwhen you decideです。

complex viewsまれにしか使用されないレイアウトが必要になる場合があります。アイテムの詳細、進行状況インジケーター、元に戻すメッセージのいずれであっても、必要なときにのみビューを読み込むことで、メモリ使用量を削減し、レンダリングを高速化できます。

単純に aViewStubを使用して、レイアウトのレンダリングの効率を高めます。を使用するViewStubと、手動でビューを作成できますが、ビュー階層に追加することはできません。実行時に、簡単に膨張できます。膨張している間ViewStub、 のコンテンツは でviewstub定義されたレイアウトに置き換えられますviewstub

ViewStub、実際に使用する/必要な場合、つまり、可視性をVISIBLE(実際には可視) またはINVISIBLE(まだ可視ではないが、サイズが 0 ではなくなった) に設定した場合にのみロードされます。どこでもコンプレックスを持つことができ、それでもViewStubあなたnice optimizationの. これらのビューのいずれかを使用すると、読み込まれます。layout with tons of small views or headersActivity load up really fast

ViewStub別のビューに膨らませた後、最初にレイアウトに追加する必要があります。

注:の欠点の 1 つは、レイアウト内のタグのインフレートをViewStub現在サポートしていないことです。<merge/>アロスViewStubは複数回使用できません。また、 a への長期間の参照を保持するViewStub必要はありません。必要な場合は、インフレ後に null にすることをお勧めします。これGCにより、食べることができます。

あなたのViewStubID がだとしましょうview_stub。で次のことを行う必要がありますactivity

ViewStub viewStub = (ViewStub) findViewById(R.id.view_stub);
View inflatedView = viewStub.inflate();
ImageButton button = (ImageButton) inflatedView.findViewById(R.id.button);

これで、ボタンを使ってやりたいことが何でもできます :) つまり、inflate メソッドは、XML ファイルの実際の要素を含むスタブ レイアウトを返します。

もちろん、常にonClickXML 属性を持つことも、動的に呼び出すこともできます。

Is a ViewStub worth it?
->For the scenarios that you are specifying, I think `ViewStub` will be worth-shot.  

については以下の URL を参照してくださいViewStub

http://android-developers.blogspot.in/2009/03/android-layout-tricks-3-optimize-with.html

http://developer.android.com/reference/android/view/ViewStub.html

http://developer.android.com/training/improving-layouts/loading-ondemand.html

あなたの代わりにViewStub試すことができます<\include> tag。は<include/>、全体が 1 つの大きなファイルであるかのように、xml コンテンツをベース xml ファイルに含めるだけです。これは、異なるレイアウト間でレイアウト パーツを共有するための優れた方法です。

アンドロイドの <include> と <ViewStub> の違い

于 2015-12-31T18:55:15.447 に答える
2

Android Studio の Android モニターの [メモリ] タブ (Android モニターのボタンは下部のバーにある必要があります) を使用して、自分で確認できます。

  • 非表示のボタンでアプリを実行したときのメモリ使用量を見てみましょう
  • 表示されたボタンでアプリを実行したときのメモリ使用量を見てください

違いがある場合は、ビューがなくなったときにすべてがプリロードされているわけではないと結論付けることができます。もちろん、これを ViewStub 実装と比較して、メモリ使用量の削減に役立つかどうかを確認することもできます。

于 2016-01-06T09:06:01.030 に答える
1

ビューの可視性を非表示に設定すると、このビューは非表示になり、レイアウト用のスペースは必要ありませんが、そのデータはロードされます。

現在、ListViews は、目に見えないものを削除したり、パフォーマンス上の理由から画面の境界の外にあるビューを言うことができます。

ViewStub は、非表示でサイズがゼロの View であり、実行時にレイアウト リソースを遅延して膨張させるために使用できます。

したがって、私の意見から、ViewStub や作成および膨張などで多くのロジックを使用するよりも、GONE Visibility を使用したビューを好むと思います。

しかしその一方で

ビューを膨らませると、レンダリングのパフォーマンスが明らかになります。

私の推測では、XML から、または可視性を変更することによって、View を膨張させるよりも、ViewStub を膨張させる方がはるかに安価です。ViewStub は、(不定の) ビューを追加/削除する必要がある場合に特に使用されます (たとえば、特定の連絡先に電話番号を追加するなど)。これがあなたが探していたものであることを願っています。

参照 : ViewStub と View.GONE の比較

ここでDDMSのいくつかの良い簡単なプレゼンテーション: http://magicmicky.github.io/android_development/benchmark-using-traceview/

于 2015-12-31T18:21:46.320 に答える
-1

ImageButton の代わりに ViewStub を使用します。

それの訳は

. ViewStub はデフォルトでサイズがゼロのビューですが、画像ボタンはそうではありません

. ビュー スタブは当然、目に見えないビューです。状態が表示されたときにのみランタイムをロードするため、パフォーマンスは画像ボタンよりも優れています。

于 2015-12-29T14:01:32.153 に答える