web-dev-qa-db-ja.com

Android)の異なる子のScrollViewとRecyclerView

垂直リストに表示される10〜15個のカスタムビューとフラグメントが混在しています。すべてのビューが異なるシナリオでRecyclerViewに利点があるかどうかはわかりません。 RecyclerViewは多くの定型コードを追加しているようで、私が得る唯一の利点はアニメーションの出入りが簡単なことだと思います。

私のカスタムビュー/フラグメントは、作成時にWebサービス呼び出しも行います。ビジネス上の理由から、Webリクエストはキャッシュされません。私の理解では、RecyclerViewは各バインディングでこれらのWebサービス呼び出しをトリガーし、冗長な呼び出しと目に見える待ち時間をもたらします。比較的、ScrollViewはビューを一度ロードする必要があり、複数の呼び出しを回避して、すべてのビューをメモリに保持します。

私の理解は正しいですか?与えられたシナリオで、ScrollViewsのパフォーマンスへの影響を理解するのに助けが必要です。

13
Jaguar

ScrollView

ScrollViewを使用すると、画面の表示に関係なく、すべてのサブビューが一度に作成されます。ソリューションにScrollViewを使用している場合は、最初にプレースホルダーを使用して、サブビューが表示されるタイミングを「リッスン」してコンテンツを更新することをお勧めします。バックグラウンドスレッドでコンテンツをフェッチするものを作成することもできます。これは、必要以上にすぐに複雑になる可能性があります。

RecyclerView

RecyclerViewには、子ビューの作成が自動的に表示されるまで延期できるという利点があり、共通のレイアウトで子ビューを再利用できます。

子ごとに異なる「アイテムビュータイプ」を使用することで、RecyclerViewの「リサイクル」部分を無効にしますが、ビューにスクロールされるまでビューの作成を延期するという利点があります。

RecyclerViewsは、AdapterおよびViewHoldersを介して操作するためのかなり構造化されたパターンを提供します。個人的にはなじみがありませんが、RecyclerViewにはRecyclerView.ViewCacheExtensionこれは、開発者がビューのキャッシュを制御できるようにすることを目的としています。

全体として、遅延バインディングの利点(表示されない可能性のあるビューを作成およびロードしないでください)とRecyclerViewの柔軟性により、おそらく良い結果が得られます。

17
CSmith

まず、ViewまたはFragment、あるいはその両方を使用するかどうかを決定する必要があります。 ViewFragmentを比較しないでください。これら2つについてはよくある誤解があります。類似しておらず、実際にはFragmentActivityに近いです。アーキテクチャと実装の条件。

次に、これらのView/Fragmentの一部を再利用できますか?そうであれば、RecycleViewが大いに役立ちます。

上記のトピックについて決定した後:

私の理解では、RecyclerViewは各バインディングでこれらのWebサービス呼び出しをトリガーします

いいえ、これは当てはまりません。新しいアイテムが表示される(再利用または新しく作成される)たびにバインディングメソッドが呼び出されます。アダプターを実装して、アイテムに対してWebAPIを1回だけ実行できます。これは選択です。

私はいつもRecycleView/ListView可能な限り、メモリフットプリントを削減し、実装を削減できます。ビューに大量のメモリ使用量がなく、実装の一部を再利用できない場合は、ScrollViewを選択しますが、実装する前によく考えます。

4
danypata