1. ホーム
  2. android

[解決済み] ベストプラクティスです。方向転換中のAsyncTask

2022-04-30 16:08:08

質問

AsyncTask は、複雑なタスクを別のスレッドで実行するための素晴らしいものです。

しかし AsyncTask がまだ実行中である場合、現在の Activity は破棄され、再起動される。そして AsyncTask がそのアクティビティに接続されている場合、失敗して "強制終了" メッセージウィンドウが発生します。

そこで、これらのエラーを回避し、AsyncTaskが失敗するのを防ぐために、ある種の"ベストプラクティス"を探しています。

これまで見てきたのは

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

いくつかのコード例です。

画面回転中のAndroid AsyncTasks、その1 第二部

ShelvesActivity.java

問題を最もよく解決し、同様に簡単に実装できる最良の方法を見つけるのを手伝ってくれませんか?私はこれを正しく解決する方法を知らないので、コード自体も重要です。

どのように解決するのですか?

行う NOT 使用 android:configChanges を使用すると、この問題に対処することができます。これは非常に悪い習慣です。

行う NOT 使用 Activity#onRetainNonConfigurationInstance() のどちらかです。これはモジュール化されておらず Fragment -をベースにしたアプリケーションです。

できること 私の記事を読む を使用して設定変更を処理する方法について説明しています。 Fragment s. を保持することの問題を解決します。 AsyncTask ローテーションの変更にまたがって、うまく 基本的には AsyncTask の中に Fragment を呼び出す。 setRetainInstance(true) を実行します。 Fragment を報告し、その AsyncTask の進捗状況や結果を、自分の Activity .