129

以来Honeycomb、使用するv4 Compatibility Libraryことが可能AsyncTaskLoaderです。私が理解していることから、AsyncTaskLoader画面の反転などの構成の変更を通じて生き残ることができます。

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

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

4

4 に答える 4

51

互換性ライブラリのソースコードを見て、詳細情報を入手できます。何をFragmentActivityしますか:

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

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

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

于 2011-08-19T14:10:51.097 に答える
50

AsyncTaskLoaderとAsyncTaskを比較すると、デバイスの画面を回転させるとわかるように、アクティビティが破棄されて再作成される可能性があります。これにより、ネットワークトランザクションの実行中に、画像でデバイスを回転させることができます。

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

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

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

于 2017-01-13T09:37:27.007 に答える
11

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

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

  • 構成の変更は物事を台無しにする可能性があります
  • アクティビティを一時停止しても、AsyncTaskは一時停止されません
  • かなりの量の定型コード(これは、より多くのエラーの可能性を意味します)

AsyncTaskLoaderドキュメント

于 2016-09-27T13:47:23.730 に答える
8

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

AsyncTask上でAsyncTaskLoaderを使用する場合:

  • AsyncTaskLoaderを使用すると、によって新しいデータが返されるまで、古いキャッシュデータを自由に読み込むことができます。forceLoad()

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

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

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

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

于 2018-02-18T06:25:21.170 に答える