Dans Apress Pro Android 4, l'auteur a déclaré que:
[...] le contexte d'activité en cours ne sera plus valide lorsque le périphérique sera pivoté. [...] Une approche consiste à utiliser une référence faible à l'activité au lieu d'une référence dure [...]
Mais l'auteur suggère simplement cela, et ne dit pas comment cela se fait. Qui a déjà fait cela avant, donnez-moi s'il vous plaît un exemple.
Quelque part dans votre AsyncTask
, vous voudrez transmettre votre activité. Ensuite, vous sauvegarderez cette référence dans une référence faible. Ensuite, vous pouvez déréférencer et utiliser à nouveau dans onPostExecute
.
Membre de classe:
WeakReference<Activity> weakActivity;
Quelque part dans AsyncTask
, probablement constructeur ou onPreExecute
:
weakActivity = new WeakReference<Activity>(activity);
Dans onPostExecute
:
Activity activity = weakActivity.get();
if (activity != null) {
// do your stuff with activity here
}
Voici un exemple de référence faible pour stocker un contexte;
WeakReference<Context> cReference = new WeakReference<Context>(getApplicationContext());
Nous pouvons maintenant utiliser cette référence faible pour effectuer un travail lié à une activité/un contexte.
Si vous souhaitez restaurer l'activité précédente, pourquoi ne pas opter pour onSaveInstanceState et la restaurer ultérieurement.
Vérifiez ce lien pour plus de détails