以下で構成される単純なアプリがあるとします。
書籍のリストを表示するためのリスト ビューを持つ Fragment
フラグメントを保持するアクティビティ
表示する書籍のリストを取得するためにどこかのサーバーにクエリを発行する Web コンポーネント
これらのコンポーネントを一緒に配線する最良の方法は何ですか? いくつかのオプションが表示されますが、どれが最適ですか (これに関するベスト プラクティスはありますか)?
アクティビティは Web サーバーにクエリを発行し (AsynTask / 新しいスレッドを介して)、結果をフラグメントにプッシュします。
UI なしで別のフラグメントを作成し、この問題を AsyncTask / new Thread 経由でクエリに発行します (オプション 1 と同様ですが、画面の回転の問題で破棄されるアクティビティが削除されます)
フラグメントは Web サーバーを直接呼び出し、アクティビティは何もしません
インテント サービスを追加してクエリを実行し、結果を次のいずれかにブロードキャストします。
a) アクティビティ - それらを Fragment にプッシュする
b) フラグメントはブロードキャストを直接受信します
これらのいずれかが他のアプローチよりも優れていると考えられていますか?
さまざまなフラグメント関連の投稿で、「フラグメントをビューと見なし、アクティビティをコントローラーと見なす」と述べられているため、オプション 3 はあまり良い考えではないことが示唆されます。
オプション 2 は、アクティビティをコントローラーと見なすハイブリッドのように見えます。これは、「コントローラー」機能の一部を別のフラグメントに委任するようなものですが、決定的に「ビュー」フラグメントではありません。
オプション 4 は興味深いように思えますが、すべての結果をブロードキャストする必要があるという問題があります (一方、1 と 2 では実際のオブジェクトがあります)。LocalBroadcastManager を使用してブロードキャストをより効率的 (かつ安全) にすることはできますが、それでもすべての Web 結果をブロードキャストする必要があります。
軽量の Parcelable オブジェクトに変換される (たとえば) JSON メッセージではなく、イメージ (実質的なもの) をダウンロードするとしたらどうなるでしょうか?
私が言ったように、私はこれを行う多くの方法を考えることができます -正しい方法は何だと思いますか?