Android Asyntask: utilisez la référence faible pour le contexte pour éviter l'écran de rotation de l'appareil
In Appress Pro Android 4 the author has said that:
[...] le contexte dans lequel l'activité sera plus valable lorsque l'appareil est en rotation. [...] Une approche consiste à utiliser une référence faible à l'activité plutôt qu'une référence dure [...]
mais l'auteur ne fait que le Suggérer, et ne dit pas comment il est fait. Qui a fait cela avant, veuillez donner moi un exemple.
3 réponses
quelque part dans votre AsyncTask
vous voudrez passer dans votre activité. Alors vous enregistrerez cette référence dans une référence faible. Ensuite, vous pouvez déréférence et l'utiliser à nouveau dans onPostExecute
.
membre de la Classe:
WeakReference<Activity> weakActivity;
quelque part AsyncTask
, sans doute au 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 WeakReference pour stocker un contexte;
WeakReference<Context> cReference = new WeakReference<Context>(getApplicationContext());
maintenant, nous pouvons utiliser cette faible référence pour faire du travail lié à L'activité/au contexte.
si vous voulez restaurer l'activité précédente, pourquoi ne pas aller sur onSaveInstanceState et le restaurer plus tard.
voir ce lien pour plus de détails""