1. ホーム
  2. android

[解決済み] AsyncTaskを複数回実行する

2022-07-08 19:05:05

質問

私のアクティビティでは、AsyncTaskを継承したクラスと、そのAsyncTaskのインスタンスであるパラメータを使用しています。私が呼び出すとき mInstanceOfAT.execute("") を呼び出すと、すべてがうまくいきます。 しかし、更新ボタンを押すとアプリがクラッシュし、AsyncTaskが再び呼び出されます(ネットワークジョブが動作しなかった場合)。原因は、その後、次のような例外が表示されます。

タスクを実行できません: タスクはすでに実行されています。 タスクは既に実行されています。 一度しか実行できません)

Asyctaskのインスタンスに対してcancel(true)を呼び出してみましたが、これもうまくいきません。今のところ唯一の解決策は、Asyntaskの新しいインスタンスを作成することです。これは正しい方法ですか?

ありがとうございます。

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

AsyncTask のインスタンスは1回しか使用できません。

代わりに、タスクを new MyAsyncTask().execute("");

AsyncTask API ドキュメントより。

スレッドのルール

このクラスが正しく動作するために、従わなければならないスレッドルールがいくつかあります。

  • タスクのインスタンスはUIスレッドで作成されなければなりません。
  • execute(Params...)はUIスレッド上で起動されなければならない。
  • onPreExecute(), onPostExecute(Result), doInBackground(Params...), onProgressUpdate(Progress...) を手動で呼び出さないこと。
  • タスクは一度だけ実行できます (二度目の実行を試みると例外が発生します)。