AsyncTask
サーバーからファイルをダウンロードするためにAndroid を使用しています。ファイルがダウンロードされると、AsyncTask を強制終了しようとしています。
protected void onPostExecute(Void result) {
MyTask.cancel(true);
}
しかし、まだ実行されています (Eclipse のデバッグ ウィンドウから確認できます)。AsyncTask を強制終了するには?
AsyncTask
サーバーからファイルをダウンロードするためにAndroid を使用しています。ファイルがダウンロードされると、AsyncTask を強制終了しようとしています。
protected void onPostExecute(Void result) {
MyTask.cancel(true);
}
しかし、まだ実行されています (Eclipse のデバッグ ウィンドウから確認できます)。AsyncTask を強制終了するには?
AsyncTask の実行が完了すると、onPostExecute() が呼び出されます。スレッドは死んでしまいます。ガベージ コレクタがクリーンアップします。何もする必要はありません。あなたがしていることは冗長です。
それ以外の場合、「キャンセル」を呼び出すと、スレッドに信号と割り込み信号が送信されます。プロセスが中断される可能性がある場合、プロセスはブロックを停止し、実行を続けます。が trueの場合は、メソッドを呼び出しisCancelled()
てから戻る必要があります。その後、andが呼び出され、スレッドは通常どおり自然に終了します。doInBackground()
isCancelled()
onCanceled()
onPostExecute()
のキャンセルに関するドキュメントがここAsyncTask
にあります。これは関連する可能性があります。
タスクは、を呼び出すことでいつでもキャンセルできます
cancel(boolean)
。このメソッドを呼び出すと、後続の呼び出しで
isCancelled()
trueが返されます。このメソッドを呼び出した後
onCancelled(Object)
、ではなく、onPostExecute(Object)
が戻り後に呼び出されdoInBackground(Object[])
ます。タスクができるだけ早くキャンセルされるようにするには、可能であれば、
isCancelled()
から定期的にの戻り値を常にチェックする必要がdoInBackground(Object[])
あります(たとえば、ループ内)。」