Honeycomb
およびv4 Compatibility Library
AsyncTaskLoader
を使用できます。私が理解していることから、AsyncTaskLoader
は画面の反転のような設定変更を通して生き残ることができます。
AsyncTaskLoader
の代わりにAsyncTask
を使用することをお勧めしますか? LoaderManager
も写真に入りますか?
しかし、AsyncTaskLoader
を正しく使用する方法についての良い例は見つかりませんでした。また、ドキュメントには例はありません。誰でも良い例を提供できますか。
詳細については、互換性ライブラリのソースコードをご覧ください。 FragmentActivity
が行うことは:
LoaderManager
のリストを保持するonRetainNonConfigurationInstance()
を使用してインスタンスを保存することにより、携帯電話を裏返したとき(または別の設定変更が発生したとき)にそれらが破壊されないことを確認してくださいinitLoader()
を呼び出したときに適切なローダーを起動しますLoaderManager
を使用してローダーとインターフェイスし、必要なコールバックを提供してローダーを作成し、返されるデータをビューに追加する必要があります。
一般に、AsyncTask
を自分で管理するよりも簡単です。ただし、AsyncTaskLoader
は正確に文書化されていないため、ドキュメントの例を検討するか、CursorLoader
の後にコードをモデル化する必要があります。
Compare AsyncTaskLoader vs. AsyncTaskの場合、デバイス画面を回転させるとわかるように、アクティビティを破棄して再作成し、画像を回転させて明確にすることができますネットワークトランザクションが進行中のデバイス:
AsyncTaskは再びバックグラウンドスレッドとして再実行され、以前のバックグラウンドスレッド処理は冗長でゾンビになりました。
AsyncTaskLoaderは、ローダーマネージャーに以前に登録されたローダーIDに基づいて再利用されるため、ネットワークトランザクションの再実行を避けます。
要約すると、AsyncTaskLoaderは、バックグラウンドスレッドの重複を防ぎ、ゾンビアクティビティの重複を排除します。
AsyncTaskLoaderはAsyncTaskと同じ機能を実行しますが、少し改善されています。アクティビティ構成の変更をより簡単に処理でき、フラグメントとアクティビティのライフサイクル内で動作します。良いことは、AsyncTaskLoaderがAsyncTaskが使用されているあらゆる状況で使用できることです。 Activity/Fragmentが処理するためにデータをメモリにロードする必要があるときはいつでも、AsyncTaskLoaderがより良い仕事をすることができます。
ただし、AsyncTasksの使用にはいくつかの問題があります。
他の回答に記載されている以外のいくつかの違い:
AsyncTaskLoader over AsyncTaskを使用する場合:
AsyncTaskLoaderは、新しいデータがforceLoad()
によって返されるまで、古いキャッシュされたデータをロードする自由を与えます
遅延をAsyncTaskLoader bysetUpdateThrottle()
に設定すると、クライアントへの連続した更新を防ぐことができます(アクティビティ/フラグメント)
AsyncTaskLoaderは、共通の親アクティビティがあり、getActivity().getSupportLoaderManager()
から開始された場合、複数のフラグメントで共有できます
AsyncTaskLoaderは、リンクされたアクティビティが利用できなくなると、LoaderManger
によって破棄されます。一方、呼び出し側のアクティビティが破棄する場合は、手動でAsyncTasksを破棄する必要があります。これにより、すべてのクリアリングを作成する時間を節約できます。 AsyncTaskLoaderは、それぞれのライフサイクルでうまく機能します。
したがって、AsyncTaskLoaderはAsyncTaskよりもはるかに優れています。