AsncTask
キャンセルされるとどうなりますか。
それはまだ呼び出しますかonPostExecute()
。
答えはNOです.docが言うように:
public final boolean cancel (boolean mayInterruptIfRunning) :
このメソッドを呼び出すと、onPostExecute(Object) が呼び出されないことが保証されます。このメソッドを呼び出した後、isCancelled() によって返される値を doInBackground(Object[]) から定期的にチェックして、できるだけ早くタスクを終了する必要があります。
公式のJavaドキュメントから:
cancel(boolean) を呼び出すことで、いつでもタスクをキャンセルできます。このメソッドを呼び出すと、後続の isCancelled() の呼び出しで true が返されます。このメソッドを呼び出すと、onPostExecute(Object) の代わりに onCancelled(Object) が doInBackground(Object[]) が戻った後に呼び出されます。タスクができるだけ早くキャンセルされるようにするには、可能であれば (たとえばループ内で) doInBackground(Object[]) から定期的に isCancelled() の戻り値をチェックする必要があります。
そしてメソッドJava doc:
public final boolean cancel (boolean mayInterruptIfRunning)
このタスクの実行をキャンセルしようとします。タスクが既に完了している、キャンセルされている、またはその他の理由でキャンセルできなかった場合、この試行は失敗します。成功し、キャンセルが呼び出されたときにこのタスクが開始されていない場合、このタスクは決して実行されません。タスクがすでに開始されている場合、mayInterruptIfRunning パラメータは、タスクを停止するために、このタスクを実行しているスレッドを中断する必要があるかどうかを決定します。
このメソッドを呼び出すと、doInBackground(Object[]) が戻った後、UI スレッドで onCancelled(Object) が呼び出されます。このメソッドを呼び出すと、onPostExecute(Object) が呼び出されないことが保証されます。このメソッドを呼び出した後、isCancelled() によって返される値を doInBackground(Object[]) から定期的にチェックして、できるだけ早くタスクを終了する必要があります。