web-dev-qa-db-fra.com

Règles de diffusion pour utiliser getBaseContext, getApplicationContext d'Android ou utiliser "this" d'une activité

J'ai beaucoup recherché cette question sur Google et j'ai trouvé de nombreuses recommandations différentes sur le moment d'utiliser getBaseContext, getApplicationContext ou le propre pointeur this d'une activité.

Trois règles qui reviennent souvent et semblent avoir beaucoup de sens sont -

  1. Pour une référence longue durée à une activité de contexte getApplicationContext doit être utilisé car cela existe tant que votre application existe
  2. Pour les contextes dont les cycles de vie sont liés à leurs activités, leur propre contexte d'activité (this) doit être utilisé
  3. Stocker les pointeurs de contexte statiquement uniquement avec une grande prudence (et, si possible, pas du tout)

En supposant que ceux-ci sont corrects, à quoi sert getBaseContext?

J'ai vu de nombreux exemples où de nouvelles intentions sont créées en utilisant -

Intent intent = new Intent(getBaseContext(), myClass.class);

Par opposition à -

Intent intent = new Intent(this, myClass.class);

Quelle est la méthode correcte ou recommandée et pourquoi?

42
Rok

GetBaseContext () est la méthode de ContextWrapper. Et ContextWrapper est, "Implémentation proxy de Context qui délègue simplement tous ses appels à un autre Context. Peut être sous-classé pour modifier le comportement sans changer le Contexte d'origine." (selon javadocs)

Donc, cela est utilisé pour déléguer les appels à un autre contexte.

13
Karan