android - 重ねる - fragmentからactivity 遷移




AsyncTaskLoaderとAsyncTaskのうち、フラグメントで使用されるものを選択するためのガイドライン (2)

LoaderCustomSupportLoaderCustomSupport使用)とFragmentRetainInstanceSupport (AsyncTaskとほぼ同等のスレッドの使用)を見てください。

どちらの例も次のような類似点を持っています。

  • どちらもデータをロードするときにUIスレッドをブロックしません
  • ユーザーが画面の回転などの構成変更を実行すると、データフェッチスレッドは破棄されません。
  • データフェッチスレッドがデータの取得を終了すると、正しいFragment UIに更新できます

しかし、違いがあります。

AsyncTaskLoader

  • 途中経過を進捗バーのダイアログに更新する簡単な方法がないようです

AsyncTask

  • これについてはわからない。 しかし、Androidのドキュメントでは、 AsyncTaskLoader非同期データの読み込みと最終結果のUIへの更新に推奨するようです。

AsyncTaskLoaderまたはAsyncTaskのどちらを選択するか、時間のかかる読み込みタスクを実行して結果をFragmentのUIに更新するかどうかを決定するためのガイドラインやチェックリストはありますか?


AsyncTaskLoadersはすべてのローダーと同様、ローテーションの問題を解決するためのもので、AsyncTaskがアクティビティで作成された後、タスクが完了する前にローテーションされ、AsyncTaskがアクティビティの破棄とともに失われます。

現在のところ、すべてのローダがパブリッシュの進行をサポートしていないことは事実です。したがって、これがあなたの状況の要件であれば、代替案を検討する必要があります。 ローテーションまたはアクティビティが破棄されるその他のイベントが問題ではない場合は、AsyncTaskを使用します。そうでない場合は、サービスを使用し、バインダを登録して進捗メッセージを前後にプッシュすることができます。

私の意見では、サービスとバインダーのメッセージは一種の痛みです。 LocalBroadcastManagerを使用してIntentService(またはAsyncTaskLoader)から進行状況のブロードキャストを送信し、アクティビティ内のBroadcastReceiverにブロードキャストを受信させて進行状況を表示させることが、より簡単な解決策であることがLocalBroadcastManagerました。


あなたの質問は私に興味を持ち、時には違いを調べることを試みました。 ここで私は私の観察を書いています。

  1. 早期終了の場合、AsyncTaskを使用する非同期タスクはスレッド内で実行を継続します。 AsyncTaskLoaderがアクティビティの早すぎる終了を処理する間、結果の処理はすぐに要求されない結果につながる可能性があります

  2. AsyncTaskLoaderは、アクティビティの設定変更(ユーザーが画面を回転させるとIE)を処理します。

  3. AsyncTaskLoaderはDataAdapterのロードデータです。このためにはAsyncTaskLoaderを使用することをお勧めします。タスクの完了後にUI(特にフラグメント)を変更する必要がある場合は、AsynTaskLoaderのonLoadFinishedでフラグメントを変更できないようにAsyncTaskを使用する方が良いでしょう。

だから、私の使い方はあなたの仕事に依存します。 上記の3つのポイントがあなたを邪魔しないならば、パフォーマンスは同じです(ただし、どのドキュメントも見つかりませんでしたが、この場合はasynctaskloaderが推奨されます:S)

関連リンク

AsyncTaskLoaderとAsyncTask

http://andreas-kluck.blogspot.com/2012/02/asynctask-and-asynctaskloader.html





android