AsyncTaskLoaderとAsyncTask


129

以来Honeycombv4 Compatibility Libraryそれを使用することが可能ですAsyncTaskLoader。私が理解しているところによると、はAsyncTaskLoader画面の反転などの構成変更を通じて生き残ることができます。

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

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

回答:


51

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

  • リストに保つLoaderManagerのを
  • を使用してインスタンスを保存することにより、電話をめくったときに(または別の構成の変更が発生したときに)破壊されないようにしてください onRetainNonConfigurationInstance()
  • initLoader()アクティビティを呼び出すときに適切なローダーをキックする

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

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


5
これを見てみましょう。多分AsyncTaskLoader、についての良い例を見つけるのは時期尚早であり、より多くの開発者がそれを使い始めると、より多くの例が出てくるでしょう。
OKA 2011

47

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

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

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

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


11

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

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

  • 構成の変更により混乱が生じる可能性があります
  • アクティビティを一時停止してもAsyncTaskは一時停止しません
  • かなりの量のボイラープレートコード(エラーの可能性が高くなります)

AsyncTaskLoaderドキュメント


8

他の回答で説明されている以外のいくつかの違い:

AsyncTaskAsyncTaskLoaderを使用する場合:

  • AsyncTaskLoaderを使用すると、新しいデータが返されるまで、古いキャッシュデータを自由にロードできます。forceLoad()

  • AsyncTaskLoaderに遅延を設定setUpdateThrottle()できます。これにより、クライアント(アクティビティ/フラグメント)の連続更新を防ぐことができます。

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.