web-dev-qa-db-fra.com

Android Asynctask: utilisez une référence faible comme contexte pour éviter que l'appareil ne tourne l'écran

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.

27
hqt

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
}
71
kabuko

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.

3
Akhil

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

Sauvegarde de l'état de l'application

0
prijupaul