onPostExecute取消了AsyncTask

如果已取消AsyncTask是否执行onPostExecute

如果确实执行了,那么在做其他任何事情之前,我是否应该总是在isCancelled开始时询问该任务是否已被取消( isCancelled )?

Solutions Collecting From Web of "onPostExecute取消了AsyncTask"

取消()上onPostExecute的记录行为在Android 2和Android 4之间发生了变化。

Android 2.3.7 onPostExecute :

在doInBackground之后在UI线程上运行。 指定的结果是doInBackground返回的值,如果任务被取消或发生exception,则返回null。

Android 4.0.1 onPostExecute :

在doInBackground之后在UI线程上运行。 指定的结果是doInBackground返回的值。 如果任务被取消,则不会调用此方法。

因此,如果您仍然定位到Android 2设备,则应该假设将调用onPostExecute并在onPostExecute中检查null结果。

根据我的经验,当取消任务时,实际上不会调用onPostExecute()。 但是,可以在任务的doInBackground()完成之后但在调用onPostExecute()之前取消任务 – 在这种情况下实际调用onPostExecute()。 因此,可以肯定的是,我在onPostExecute()中调用isCancelled()方法,如果任务已被取消,则只返回“return”。 这个对我有用。

检查AsyncTask源代码后,即使任务被取消,似乎也会调用onPostExecute。 但是,在调用onPostExecute之前,如果任务已被取消,则结果将设置为null(?)。

编辑:@bain提供更新的答案 。