【问题标题】:onPostExecute on cancelled AsyncTaskonPostExecute 取消 AsyncTask
【发布时间】:2010-07-26 12:43:58
【问题描述】:

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

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

【问题讨论】:

标签: android multithreading android-asynctask


【解决方案1】:

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 检查空结果。

【讨论】:

  • 非常有用的答案!
  • onCancelled 如果取消异步任务会被调用
【解决方案2】:

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

【讨论】:

【解决方案3】:

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

编辑:@bain 提供了更新的answer

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多