onPostExecute取消了AsyncTask

hpi*_*que 31 multithreading android android-asynctask

onPostExecute如果AsyncTask取消了会执行吗?

如果它确实执行了,是否可以安全地说我应该isCancelled在开始onPostExecute之前询问任务是否已被取消(),然后再做其他事情?

bai*_*ain 67

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

Android 2.3.7 onPostExecute:

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

Android 4.0.1 onPostExecute:

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

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

  • 非常有用的答案! (3认同)

Mar*_*sny 7

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


hpi*_*que 6

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

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