J'ai déclaré une classe pour faire le travail en arrière-plan:variable locale d'activité toujours valable après OnDestroy()
public class ReportLoadTask extends AsyncTask<Void,Void, ReportLoadTaskResult> {
public ReportLoadTask(Context context, String barcode, ReportLoadTaskListener l) {
...
}
}
J'utilise une instance de cette classe comme une variable locale de Activity
:
private ReportLoadTask mReportLoadTask;
...
en un point de la classe code Je prépare une tâche, puis laisser l'utilisateur décider de poursuivre ou non en montrant AlertDialog
:
mReportLoadTask = new ReportLoadTask(this, barcode, this)
...
new AlertDialog.Builder(this)
.setMessage("Continue with search?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
mReportLoadTask.execute();
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
mReportLoadTask = null;
return;
}
})
.setIcon(android.R.drawable.ic_dialog_alert)
.show();
Lors du test, je m'attendais à ce que mReportLoadTask
devienne null
si je détruis Activity
(par exemple en faisant tourner l'appareil) alors que AlertDialog
est affiché. Mais en pratique, cela n'arrive pas. Toutes les méthodes de cycle de vie Activity
(OnPause
, OnStop
, OnDestroy
) sont appelées correctement, même d'autres variables locales (certaines int
s) sont détruites mais cette variable semble en quelque sorte "survivre". Pourquoi donc?
Après avoir exploré le Net, il semble que Android est maintenant quelque part une référence de cet objet, mais où pourrait-il garder? La seule référence à cet objet est dans mon Activity
et il est en train d'être détruit.
Probablement 'mReportLoadTask' est en cours d'exécution, vous avez essayé après avoir appelé' mReportLoadTask.cancel' avant de faire l'objet null 'mReportLoadTask'? –
'mReportLoadTask' ne deviendra' null' si vous définissez explicitement 'null' à ce – nandsito