AsyncTask
完了中にキャンセルできますonPostExecute()
か?
それとも、一度doInBackground()
完了すると、タスクをキャンセルできなくなりますか?
AsyncTask
完了中にキャンセルできますonPostExecute()
か?
それとも、一度doInBackground()
完了すると、タスクをキャンセルできなくなりますか?
私が理解していることから、タスクはそのdoInBackground()
状態でのみ実行されているということは、onPostExecute()
タスクが完了していてキャンセルできないことを意味します。
cancel()
このタスクの実行をキャンセルしようとします。タスクがすでに完了している場合、すでにキャンセルされている場合、またはその他の理由でキャンセルできなかった場合、この試行は失敗します。成功し、cancelが呼び出されたときにこのタスクが開始されていない場合、このタスクは実行されません。タスクがすでに開始されている場合、mayInterruptIfRunning
パラメーターは、タスクを停止するためにこのタスクを実行しているスレッドを中断する必要があるかどうかを決定します。
このメソッドを呼び出すと、リターンonCancelled(Object)
後にUIスレッドで呼び出されdoInBackground(Object[])
ます。onPostExecute(Object)
このメソッドを呼び出すと、それが呼び出されないことが保証されます。このメソッドを呼び出した後、isCancelled()
から定期的に返される値を確認しdoInBackground(Object[])
て、タスクをできるだけ早く終了する必要があります。
メソッドをオーバーライドonCanceled()
します。以下のサンプルコードを参照してください。
private class UpdateTask extends AsyncTask<Void, Void, Void> {
private boolean running = true;
@Override
protected void onCancelled() {
running = false;
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
onUpdate();
}
@Override
protected Void doInBackground(Void... params) {
while(running) {
publishProgress();
}
return null;
}
}