1

AsyncTaskを使用していくつかのネットワーク操作を実行するサービスを作成しています。AsyncTaskのdoInBackgroundに非常に長い時間がかかっているとしましょう。その間、リソースが少なくなり、オペレーティングシステムがサービスをシャットダウンしています。

AsyncTaskはいつ強制終了されますか?onDestroyが呼び出されたときにAsyncTaskは引き続き実行されますか、それとも後で発生しますか、それともAsyncTaskをシャットダウンする責任がありますか?onDestroyのコードとdoInBackgroundのコードの間に競合状態がないことを確認しようとしています。

4

1 に答える 1

2

AsyncTaskは、キャンセルするか、システムがそれをホストしているプロセスを破棄するまで実行を継続します。システムはそれ自体、AsyncTaskについて知らないので、サービスをシャットダウンするときにそれについて何もしません。サービスがAsyncTaskを作成したことを確かに知りません。

onDestroyが呼び出された後、アプリケーションのプロセスも破棄され、AsyncTaskも破棄される可能性が非常に高くなります。ただし、最も安全なポリシーは、予防策を講じて、onDestroyでAsyncTaskをキャンセルすることです。

おそらく興味深い補足として、処理のためにキューに入れられた要求は、処理される前にプロセスが停止すると失われるということです。そのため、完了しなければならないAsyncTaskに送信された操作は、完了していなくても再発行できるように、永続タスクログに書き込む必要があります。

于 2011-07-07T17:47:54.707 に答える