我有一个从活动 A 执行的 Asynctask B。在该 B 的后执行时,在特定条件下 B 可能会创建一个自身的新实例并执行它。
我所做的是将 AsyncTask 声明作为全局放在 B 中并覆盖 B 的 onCancelled 以取消在 postexecute 上创建的新实例。
所以 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 会被调用吗?
这是为了确保我取消从活动中执行的 AsyncTask 以及从该 AsyncTask 中执行的 AsyncTask