在AsyncTask android中使用onCancelled(Object result)方法的确切用途是什么?

时间:2016-03-15 07:15:57

标签: android

致电

cancel(true); 

on asyncTaskObj将用户带到

onCancelled()

方法。何时以及为何

onCancelled(Object result) 

将被调用,它的用途是什么?

3 个答案:

答案 0 :(得分:1)

调用此方法将导致对isCancelled()的后续调用返回true。在调用此方法后,onCancelled(Object),

在doInBackground(Object [])返回后,将调用

而不是onPostExecute(Object)。

来自Android开发者文档developer.android.com/reference/android/os/AsyncTask.html

如果有for循环,你可以检查isCancelled()来完成doInbackground的工作

protected Object doInBackground(Object... obj) {
  while (/* condition */) {

//.......

    if (isCancelled()) break;
  }
  return myReturn;
}

答案 1 :(得分:0)

这来自documentation ...

  

在调用cancel(boolean)并且doInBackground(Object [])完成后在UI线程上运行。

     

默认实现只是调用onCancelled()并忽略结果。如果您编写自己的实现,请不要调用super.onCancelled(result)。

显然,它让您有机会在最终取消操作后作出反应,例如更改某些UI组件的状态或通知用户。例如,假设您正在执行长时间运行的操作(如下载文件),而文件正在下载时显示进度条,但您还会显示“取消”按钮,以便用户可以取消下载。

点击取消后,您可以停止进度条并在触发“onCancelled”时显示“正在取消...”文本,您可以隐藏“取消”按钮,状态文本视图和进度条。

答案 2 :(得分:0)

  • 可以通过调用取消(布尔)随时取消任务。

  • 调用此方法将导致后续调用 isCancelled() 返回true。

  • 调用此方法后, onCancelled(Object),而不是 在doInBackground(Object [])之后将调用onPostExecute(Object) 回报。

  • 为了确保尽快取消任务,您应该这样做 始终定期检查 isCancelled()的返回值 doInBackground(Object []),如果可能的话(例如在循环内)。

description for cancel() function

description for isCancelled() function

description for onCancelled() function