如果已取消,是否onPostExecute
执行?AsyncTask
如果它确实执行了,是否可以肯定地说我应该总是isCancelled
在开始时询问任务是否已被取消()onPostExecute
,然后再做其他事情?
如果已取消,是否onPostExecute
执行?AsyncTask
如果它确实执行了,是否可以肯定地说我应该总是isCancelled
在开始时询问任务是否已被取消()onPostExecute
,然后再做其他事情?
onPostExecute 在 cancel() 上的记录行为在 Android 2 和 Android 4 之间发生了变化。
在 doInBackground 之后在 UI 线程上运行。指定的结果是 doInBackground 返回的值,如果任务被取消或发生异常,则返回 null。
在 doInBackground 之后在 UI 线程上运行。指定的结果是 doInBackground 返回的值。如果任务被取消,则不会调用此方法。
因此,如果您仍然针对 Android 2 设备,您应该假设将调用 onPostExecute 并在 onPostExecute 检查空结果。
根据我的经验,取消任务时实际上不会调用 onPostExecute() 。但是,可以在任务的 doInBackground() 完成后但在调用 onPostExecute() 之前取消任务 - 在这种情况下实际上调用了 onPostExecute()。因此,可以肯定的是,我在 onPostExecute() 中调用 isCancelled() 方法,如果任务已被取消,则只需“返回”。这个对我有用。
检查 AsyncTask 源代码后,即使任务被取消,似乎也会调用 onPostExecute。但是,如果任务已被取消,则在调用 onPostExecute 之前,结果将设置为 null (?)。
编辑:@bain 提供了一个更新的答案。