J'ai un Asynctask B qui est exécuté à partir de l'activité A. Lors de l'exécution postérieure de ce B, à une certaine condition B pourrait créer une nouvelle instance de lui-même et l'exécuter. Ce que j'ai fait est de mettre la déclaration AsyncTask comme globale à l'intérieur de la B et a substitué l'onCancelled de B pour annuler la nouvelle instance créée sur ontextextuel.Annuler AsyncTask qui n'exécute pas les appels onCancelled?
donc onDestroy de l'activité A b.cancel() annulera également la tâche asynchrone any exécutée sur PostExecute.
@Override
protected void onCancelled()
{
if(currentPlansAsync != null)
{
currentPlansAsync.cancel(true);
}
super.onCancelled();
}
Et nouvelle instance de currentPlansAsync est appelé onPostExecute comme suit:
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();
}
}
Ma question est que si AsyncTask B a arrêté l'exécution et il a exécuté un autre AsyncTask C et l'activité A va à OnDestroy et B est annulé (b.cancel(true);
) sera surCancelled qui est remplacé dans la classe B être appelé ??
Il en est ainsi j'assure que je résilie le AsyncTask qui a été exécuté à partir de l'activité et aussi la AsyncTask exécutée à partir de l'intérieur de cette AsyncTask
Vous ne pouvez pas annuler une tâche une fois celle-ci terminée. Mais vous pouvez rendre la méthode 'onCancelled' publique et l'appeler à la place. – vorrtex