web-dev-qa-db-ja.com

AsyncTaskLoaderとAsyncTask

Honeycombおよびv4 Compatibility LibraryAsyncTaskLoaderを使用できます。私が理解していることから、AsyncTaskLoaderは画面の反転のような設定変更を通して生き残ることができます。

AsyncTaskLoaderの代わりにAsyncTaskを使用することをお勧めしますか? LoaderManagerも写真に入りますか?

しかし、AsyncTaskLoaderを正しく使用する方法についての良い例は見つかりませんでした。また、ドキュメントには例はありません。誰でも良い例を提供できますか。

128
OKA

詳細については、互換性ライブラリのソースコードをご覧ください。 FragmentActivityが行うことは:

  • LoaderManagerのリストを保持する
  • onRetainNonConfigurationInstance()を使用してインスタンスを保存することにより、携帯電話を裏返したとき(または別の設定変更が発生したとき)にそれらが破壊されないことを確認してください
  • アクティビティでinitLoader()を呼び出したときに適切なローダーを起動します

LoaderManagerを使用してローダーとインターフェイスし、必要なコールバックを提供してローダーを作成し、返されるデータをビューに追加する必要があります。

一般に、AsyncTaskを自分で管理するよりも簡単です。ただし、AsyncTaskLoaderは正確に文書化されていないため、ドキュメントの例を検討するか、CursorLoaderの後にコードをモデル化する必要があります。

51
Nikolay Elenkov

Compare AsyncTaskLoader vs. AsyncTaskの場合、デバイス画面を回転させるとわかるように、アクティビティを破棄して再作成し、画像を回転させて明確にすることができますネットワークトランザクションが進行中のデバイス:

AsyncTaskは再びバックグラウンドスレッドとして再実行され、以前のバックグラウンドスレッド処理は冗長でゾンビになりました。

AsyncTaskLoaderは、ローダーマネージャーに以前に登録されたローダーIDに基づいて再利用されるため、ネットワークトランザクションの再実行を避けます。

要約すると、AsyncTaskLoaderは、バックグラウンドスレッドの重複を防ぎ、ゾンビアクティビティの重複を排除します。

44
Hoang Duc Dong

AsyncTaskLoaderAsyncTaskと同じ機能を実行しますが、少し改善されています。アクティビティ構成の変更をより簡単に処理でき、フラグメントとアクティビティのライフサイクル内で動作します。良いことは、AsyncTaskLoaderがAsyncTaskが使用されているあらゆる状況で使用できることです。 Activity/Fragmentが処理するためにデータをメモリにロードする必要があるときはいつでも、AsyncTaskLoaderがより良い仕事をすることができます。

ただし、AsyncTasksの使用にはいくつかの問題があります。

  • 構成の変更は混乱を招く可能性があります
  • アクティビティを一時停止しても、AsyncTaskは一時停止しません
  • かなりの量の定型コード(より多くのエラーが発生する可能性があることを意味します)

AsyncTaskLoader doc

11
Attif

他の回答に記載されている以外のいくつかの違い:

AsyncTaskLoader over AsyncTaskを使用する場合:

  • AsyncTaskLoaderは、新しいデータがforceLoad()によって返されるまで、古いキャッシュされたデータをロードする自由を与えます

  • 遅延をAsyncTaskLoader bysetUpdateThrottle()に設定すると、クライアントへの連続した更新を防ぐことができます(アクティビティ/フラグメント)

  • AsyncTaskLoaderは、共通の親アクティビティがあり、getActivity().getSupportLoaderManager()から開始された場合、複数のフラグメントで共有できます

  • AsyncTaskLoaderは、リンクされたアクティビティが利用できなくなると、LoaderMangerによって破棄されます。一方、呼び出し側のアクティビティが破棄する場合は、手動でAsyncTasksを破棄する必要があります。これにより、すべてのクリアリングを作成する時間を節約できます。 AsyncTaskLoaderは、それぞれのライフサイクルでうまく機能します。

したがって、AsyncTaskLoaderはAsyncTaskよりもはるかに優れています。

8
Palak Darji