Gingerbread (Android 2.3) では修正されているとの事です。
Romain Guy: This AyncTask's cancel bug was fixed in Gingerbread? It was fixed in Gingerbread yes :) via groups.google.com - AyncTask's cancel bug was fixed in Gingerbread?
2.3 のコードが公開されれば、2.2 でも ”正しく” 修正できますね。
[AsyncTaskの cancel()には問題があり、Froyoの次で修正される。
で教えてもらった話。
Eric Mill:
onDestroy(), calls task.cancel()
task's onPostExecute runs, isCancelled() returns false, so I have
no conditional to stop the flow
and that's it. onCancelled never runs.
Activity.onDestroy で AsyncTask.cancel を呼ぶと、
から、なんとかしてぇ!ということらしい。
んで Google の Romain さんが、
Romain Guy: There was a race in the cancel() code that we fixed post-froyo.
と言ってるけど、"post-froyo" というのは、 Post-froyo means after froyo, so not in froyo :) だそうで、”Froyo の後” つまり、Gingerbread (Android 2.3) での修正らしい。 (けど "gingerbread!" って断言してないからもっと先かも知れないなあ。) なので、しばらくは、いや当分は自力で flag でも用意して回避するしかないみたい。 けど AsyncTask.cancel は final メソッドで override できないから、何とも不自然なコードになりそう。。。