回答:
詳細については、互換性ライブラリのソースコードをご覧ください。a FragmentActivity
とは:
LoaderManager
のをonRetainNonConfigurationInstance()
initLoader()
アクティビティを呼び出すときに適切なローダーをキックするを使用LoaderManager
してローダーとのインターフェースをとり、必要なコールバックを提供してローダーを作成し、ローダーが返すデータをビューに入力する必要があります。
一般に、AsyncTask
自分で管理するよりも簡単です。ただし、AsyncTaskLoader
は十分に文書化されていないため、ドキュメント内の例を検討するか、コードをモデル化する必要がありますCursorLoader
。
AsyncTaskLoaderとAsyncTaskを比較すると、デバイスの画面を回転させるとわかるように、アクティビティを破棄して再作成し、ネットワークトランザクションの進行中に画像がデバイスを回転させることを明確にすることができます。
AsyncTaskは再びバックグラウンドスレッドとして再実行され、以前のバックグラウンドスレッド処理は冗長でゾンビでした。
AsyncTaskLoaderは、以前にローダーマネージャーに登録されたローダーIDに基づいて再利用されるだけなので、ネットワークトランザクションの再実行は避けてください。
要約すると、 AsyncTaskLoaderはバックグラウンドスレッドの重複を防ぎ、ゾンビアクティビティの重複を排除します。
AsyncTaskLoaderは、同じ機能を実行AsyncTaskが、少しよりよいです。アクティビティ構成の変更をより簡単に処理でき、フラグメントとアクティビティのライフサイクル内で動作します。AsyncTaskLoaderは、AsyncTaskが使用されているあらゆる状況で使用できるというのが良い点です。Activity / Fragmentが処理するためにデータをメモリにロードする必要があるときはいつでも、AsyncTaskLoaderがより適切に処理できます。
ただし、AsyncTasksの使用にはいくつかの問題があります。
他の回答で説明されている以外のいくつかの違い:
AsyncTaskでAsyncTaskLoaderを使用する場合:
AsyncTaskLoaderを使用すると、新しいデータが返されるまで、古いキャッシュデータを自由にロードできます。forceLoad()
AsyncTaskLoaderに遅延を設定setUpdateThrottle()
できます。これにより、クライアント(アクティビティ/フラグメント)の連続更新を防ぐことができます。
AsyncTaskLoaderは、共通の親アクティビティがあり、それが開始された場合、複数のフラグメントで共有できます。getActivity().getSupportLoaderManager()
AsyncTaskLoaderはLoaderManger
、リンクされたアクティビティが利用できなくなると破棄されます。一方、呼び出し元のアクティビティが破棄された場合は、AsyncTasksを手動で破棄する必要があります。これにより、すべてのクリアリングアイテムを作成する時間を節約できます。AsyncTaskLoaderは、それぞれのライフサイクルでうまく機能します。
したがって、AsyncTaskLoaderはAsyncTaskよりも優れています。
AsyncTaskLoader
、についての良い例を見つけるのは時期尚早であり、より多くの開発者がそれを使い始めると、より多くの例が出てくるでしょう。