调用时
cancel(true);
on asyncTaskObj 将用户带到
onCancelled()
方法。何时以及为何
onCancelled(Object result)
会被召唤,有什么用?
-
可以随时通过调用 cancel(布尔值)来取消任务。
-
调用此方法将导致后续调用 isCancel() 到返回 true。
-
调用此方法后,onCancel(Object),而不是onPostExecute(Object) 将在 doInBackground(Object[]) 之后调用返回。
-
要确保尽快取消任务,您应该始终定期检查 isCancel() 的返回值doInBackground(Object[]),如果可能的话(例如在循环中)。
取消() 函数的说明
isCancel() 函数的说明
onCancel() 函数的说明
调用此方法将导致后续对 isCancel() 的调用返回 true。调用此方法后,onCancel(对象),
而不是onPostExecute(Object)将在doInBackground(Object[])返回后被调用。
它来自安卓开发者文档 developer.android.com/reference/android/os/AsyncTask.html
你可以检查isCancel()来完成doInbackground的工作,如果它有循环
protected Object doInBackground(Object... obj) {
while (/* condition */) {
//.......
if (isCancelled()) break;
}
return myReturn;
}
来自文档...
在调用取消(布尔值)并且 doInBackground(Object[]) 完成后在 UI 线程上运行。
默认实现只是调用 onCancel() 并忽略结果。如果你编写自己的实现,不要调用super.onCancel(result)。
显然,它使您有机会在最终取消操作后做出反应,例如更改某些 UI 组件的状态或通知用户。例如,假设您正在执行长时间运行的操作(如下载文件),在下载文件时,您会显示一个进度条,但您还公开了一个"取消"按钮,以便用户可以取消下载。
单击取消后,您可以停止进度条并显示"正在取消..."文本 当触发"onCancel"时,您可以隐藏"取消"按钮、状态文本视图和进度条。