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.

26
demandé sur Brian Tompsett - 汤莱恩 2012-03-21 21:00:48

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
}
68
répondu kabuko 2012-03-21 17:34:40

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.

2
répondu Akhil 2012-03-21 17:21:58

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""

Enregistrement de l'état de l'application

0
répondu prijupaul 2017-05-23 12:26:21