32

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

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

4

3 回答 3

68

onPostExecute 在 cancel() 上的记录行为在 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 检查空结果。

于 2013-04-30T14:05:00.587 回答
8

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

于 2010-07-26T14:54:30.047 回答
7

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

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

于 2010-08-06T15:06:51.220 回答