ActivityのonPauseライフサイクルイベントでシャットダウンしたAsyncTaskがあるので、誰かがアプリケーションを離れるときに実行されませんが、これにもかかわらず続行されます。トレースを追加しました。このスニペットは問題を示しています。Android AsyncTaskはキャンセルされても停止しません。なぜですか?
Trace.d(TAG,"Task state: " + myTask.getStatus());
myTask.cancel(true);
Trace.d(TAG,"Task state: " + myTask.getStatus());
出力:
Task state: RUNNING
Task state: RUNNING
なぜキャンセル()メソッドは、タスクの状態に影響を持っていないですか?私はドキュメントをキャンセルメソッドがタスクを停止しようとしますが、どのような状況で失敗すると言うことに気づいた? 10秒ごとにログ出力を出力しているので、タスクは確実に実行されています。上記のように、ステータスは実行中として返されます。
更新:私はisCancelled()状態も表示するためにトレースを追加しましたが、それは変更されます。 cancel(true)を呼び出すと、キャンセルされた状態がfalseからtrueに変更されますが、明らかにStatusに影響を与えないか、スレッドを停止します。
タスク内のループがタスクがキャンセルされたかどうかをチェックし、ループを終了する方法はありますか? –
キャンセルの戻り値は何ですか?キャンセルしたと伝えましたか? –
@Joelはい、私はそれを行うことができますが、他の場所でcancel()メソッドを使用するとき、私はそれが期待したことをしていない理由を理解したいと思います –