onPostExecute取消AsyncTask

如果AsyncTask被取消, onPostExecute是否执行?

如果它确实执行,是否可以安全地说,在执行任何其他操作之前,我应该始终询问isCancelled的开始是否已经取消了任务( isCancelled )?

Solutions Collecting From Web of "onPostExecute取消AsyncTask"

Android 2和Android 4之间的onPostExecute on cancel()logging的行为已更改。

Android 2.3.7 onPostExecute :

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

Android 4.0.1 onPostExecute :

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

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

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

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

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