【发布时间】:2013-04-30 14:47:38
【问题描述】:
我有一个从活动 A 执行的 Asynctask B。 在该 B 的后执行时,在特定条件下 B 可能会创建一个自己的新实例并执行它。
我所做的是将 AsyncTask 声明作为全局放在 B 中并覆盖 B 的 onCancelled 以取消在 onpostexecute 创建的新实例。
因此,Activity A b.cancel() 的 onDestroy 也会取消在 PostExecute 上执行的任何 AsyncTask。
@Override
protected void onCancelled()
{
if(currentPlansAsync != null)
{
currentPlansAsync.cancel(true);
}
super.onCancelled();
}
currentPlansAsync 的新实例调用 onPostExecute 如下:
private void processAfterFailure()
{
if(this.counter < 3)
{
ProgressDialog progressDialog =
GeneralUtils.showProgressDialog(parentActivity, parentActivity.getResources().getString(string.WaitDialogTitle),
parentActivity.getResources().getString(string.WaitDialogMessage));
this.counter++;
currentPlansAsync = new CurrentPlansAsync(parentActivity, application, progressDialog, application.planBL, this.counter);
currentPlansAsync.execute();
}
else
{
Toast.makeText(parentActivity, parentActivity.getResources().getString(string.SERVICE_ERROR), Toast.LENGTH_LONG).show();
}
}
我的问题是,如果 AsyncTask B 已经停止执行并且它已经执行了另一个 asynctask C 并且活动 A 转到 onDestroy 并且 B 被取消(b.cancel(true);)
在 B 类中被覆盖的 onCancelled 会被调用吗??
这是为了确保我取消从 Activity 执行的 AsyncTask 以及从该 AsyncTask 中执行的 AsyncTask
【问题讨论】:
-
任务完成后不能取消。但是您可以将
onCancelled方法设为公开并调用它。