0

アプリにいくつかの広告を表示するために広告ネットワークを使用しています。ライブラリのloadAd関数により、エミュレータがフリーズすることがあります(ファイアウォールの問題が原因である可能性があります)。

とにかく、それ以来、私AsyncTasksはそのメソッドの実際の呼び出しを行う使用に移行しましたloadAd(したがって、UIはもうフリーズしません)。これは、サーバーからバナーなどを要求します。

を再起動するたびにActivity、のonDetroyメソッドActivityが呼び出されます。そこで、AscynTask's cancelメソッドを呼び出してタスクをキャンセルし、...おそらくスレッドを停止/削除します。

DDMSを見ると、次のことに気づきました。

スナップショットを参照してください:http://bayimg.com/EAkBaAaEH

executeのメソッドを呼び出すたびに、 `onDestroy()でメソッドを呼び出したときに消えない(殺される)ように見える2AsyncTaskAsynkTasks(#1と#2)が作成されます。cancel(true)

再起動後Activity、別の2つのAsyncTasksスレッドが作成されます(#3と#4)。

もう一度再起動した後、もうActivity1つAsynkTask作成されます(#5)。

どうすれば実際にタスクを強制終了できますか?彼らの実行を完全に停止するように?それとも、実際に停止して、DDMSを誤解しているだけですか?

4

1 に答える 1

1

Asynctask doinBackground で while(true)(long continous task) のようなことをしていないことを確認してください。asynctask は、バックグラウンド スレッドの長時間/連続プロセスには使用しないでください。小さなバックグラウンド タスクの場合は、onPostExecute の代わりに終了します。 doinbackground の実行中にキャンセルが呼び出された場合、oncancellistener が呼び出されます...

DDMS にまだ残っている場合は、これを確認してください。 実行後も AsyncTask スレッドが残っていますが、それは正常ですか?

asynctasks はスレッド プールで実行されるため、アイドル状態のスレッドだけを警告するものは何もありません。アイドル状態のスレッドは、次の asynctask が実行されるのを待ちます

于 2013-03-09T09:38:56.017 に答える