ベストプラクティス: 方向変更中の AsyncTask 質問する

ベストプラクティス: 方向変更中の AsyncTask 質問する

AsyncTask複雑なタスクを別のスレッドで実行するのに最適です。

しかし、 の実行中に方向の変更や別の構成の変更があった場合AsyncTask、現在の はActivity破棄され、再起動されます。 のインスタンスはAsyncTaskそのアクティビティに接続されているため、失敗し、「強制終了」メッセージ ウィンドウが表示されます。

そこで、これらのエラーを回避し、AsyncTask が失敗しないようにするための何らかの「ベスト プラクティス」を探しています。

これまでに見たものは次のとおりです。

  • 向きの変更を無効にします。(これは絶対に処理すべき方法ではありません。)
  • タスクを存続させ、新しいアクティビティインスタンスで更新するonRetainNonConfigurationInstance
  • が破棄されたときにタスクをキャンセルしActivity、がActivity再度作成されたときにタスクを再開するだけです。
  • アクティビティ インスタンスではなく、アプリケーション クラスにタスクをバインドします。
  • 「shelves」プロジェクトで使用されるいくつかのメソッド (onRestoreInstanceState 経由)

いくつかのコード例:

画面回転中の Android AsyncTasks、パート IそしてパートII

シェルフアクティビティ.java

問題を最もうまく解決し、実装も簡単な最善のアプローチを見つけるのを手伝ってもらえますか? これを正しく解決する方法がわからないため、コード自体も重要です。

ベストアンサー1

するないこの問題に対処するために使用しますandroid:configChanges。これは非常に悪い習慣です。

するないどちらかを使用してください。これはモジュール性が低く、ベースのアプリケーションActivity#onRetainNonConfigurationInstance()には適していません。Fragment

あなたはできる私の記事を読んでください保持された を使用した構成変更の処理方法を説明しますFragment。これは、ローテーション変更にわたって を保持するという問題をうまく解決します。基本的には、内で をホストし、を呼び出し、保持されたを介して の進行状況/結果をに報告するAsyncTask必要があります。AsyncTaskFragmentsetRetainInstance(true)FragmentAsyncTaskActivityFragment

おすすめ記事