3

AsyncTaskサーバーからファイルをダウンロードするためにAndroid を使用しています。ファイルがダウンロードされると、AsyncTask を強制終了しようとしています。

protected void onPostExecute(Void result) {
    MyTask.cancel(true);
}

しかし、まだ実行されています (Eclipse のデバッグ ウィンドウから確認できます)。AsyncTask を強制終了するには?

4

2 に答える 2

3

AsyncTask の実行が完了すると、onPostExecute() が呼び出されます。スレッドは死んでしまいます。ガベージ コレクタがクリーンアップします。何もする必要はありません。あなたがしていることは冗長です。

それ以外の場合、「キャンセル」を呼び出すと、スレッドに信号と割り込み信号が送信されます。プロセスが中断される可能性がある場合、プロセスはブロックを停止し、実行を続けます。が trueの場合は、メソッドを呼び出しisCancelled()てから戻る必要があります。その後、andが呼び出され、スレッドは通常どおり自然に終了します。doInBackground()isCancelled()onCanceled()onPostExecute()

于 2012-08-21T13:55:54.950 に答える
2

のキャンセルに関するドキュメントがここAsyncTaskにあります。これは関連する可能性があります。

タスクは、を呼び出すことでいつでもキャンセルできますcancel(boolean)

このメソッドを呼び出すと、後続の呼び出しでisCancelled()trueが返されます。

このメソッドを呼び出した後onCancelled(Object)、ではなく、onPostExecute(Object)が戻り後に呼び出されdoInBackground(Object[])ます。

タスクができるだけ早くキャンセルされるようにするには、可能であれば、isCancelled()から定期的にの戻り値を常にチェックする必要がdoInBackground(Object[])あります(たとえば、ループ内)。」

于 2012-08-21T14:22:50.267 に答える