Android デベロッパー ガイドにはFragmentsの使用に関する適切なセクションがあります。フラグメントを使用する 1 つの方法は、UI を使用しないことです。これをバックグラウンド処理の手段として使用することについての言及がいくつかありますが、フラグメントはこの分野にどのような利点をもたらしますか? バックグラウンド処理のために、スレッド、AsyncTasks、Handlers などではなく Fragment を使用する場所はどこですか?
5 に答える
Fragment
インスタンスは、デバイス構成の変更 (画面の回転など) を通じて永続化できます。は構成の変更が発生すると破棄されて再作成されるためActivity
、スレッドまたは を追跡するように設計することは困難AsyncTask
です。一方、システムは、構成変更の反対側 (いわば) で、永続化Fragment
されたものを適切なものに再接続することを処理します。Activity
あなたはまだスレッドまたはを使用していますがAsyncTask
、Fragment
代わりに がそれを保持しています。
他にも使い道があるかもしれませんが、私が思いつくのはこれです。
Facebook、Google、Twitter など、さまざまなソーシャル ネットワークへのログインを処理するかなり複雑なコードが大量にあります。ユーザーはアプリのさまざまな場所からログインできるため、これはさまざまなアクティビティで再利用する必要があるコードです。1 つのクラスからしか継承できず、その継承を他の無関係な機能に使用しているため、基本アクティビティ クラスには属しません。
UI のないフラグメントは私の状況に最適であり、たとえばライフサイクル コールバックが必要なため、フラグメントはニーズにうまく適合します (Facebook はこの点で悪名高く、たとえば onActivityResult などを必要とします)。
私はグレッグ・エニスに同意します。
私は現在、一連の RESTful API 呼び出しを実行する必要があるアプリに取り組んでいます。ほとんどの場合、これらは 1 つのアクティビティ内で行われます。しかし、ヘッドレス フラグメントを使用して、2 つの異なるアクティビティがそれぞれ複数の呼び出しの同じシーケンスを作成し、もちろん、シーケンス内の任意の場所でエラーを処理する必要がある場合に対処しました。シーケンスをフラグメントに集中させることで、かなりの量のコードの重複を避けることができました。
大量のデータを取得する別の API 呼び出しがあります。これらのデータはすべて現在 UI スレッドで解析されており、時間がかかりすぎています。バックエンド API の将来のバージョンでは、サーバー側がデータをページングし、アプリは一連の API 呼び出しを行って完全な結果を取得する必要があります。ヘッドレス フラグメントを保持するための優れたアプリケーションになると思います。開始アクティビティは、ヘッドレス フラグメントと呼び出しシーケンスを開始できます。最初の呼び出しでエラーが発生しなかった場合、そのアクティビティは次のアクティビティを開始して最初の結果を表示できますが、フラグメントはデータの次のページをサーバーに要求し続けます。API 呼び出しは、バックグラウンド スレッドで既に行われています。保持されたフラグメントは、独自のワーカー スレッドで実行する必要があると確信しています。
Fragment の setRetainInstance(boolean) を理解するに、保持されたフラグメントに関する詳細情報があります。