Mon activité tente de créer un AlertDialog qui nécessite un contexte comme paramètre. Cela fonctionne comme prévu si j'utilise:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
Cependant, je me méfie d'utiliser "this" comme contexte en raison du potentiel de fuites de mémoire lorsque Activity est détruit et recréé même pendant quelque chose de simple comme une rotation d'écran. À partir d'un article connexe sur le blog du développeur Android :
Il existe deux moyens simples d'éviter les fuites de mémoire liées au contexte. La plus évidente est d'éviter d'échapper au contexte en dehors de sa propre portée. L'exemple ci-dessus montre le cas d'une référence statique mais les classes internes et leur référence implicite à la classe externe peuvent être tout aussi dangereuses. La deuxième solution consiste à utiliser le contexte d'application. Ce contexte vivra tant que votre application sera en vie et ne dépendra pas du cycle de vie des activités. Si vous prévoyez de conserver des objets à longue durée de vie qui ont besoin d'un contexte, n'oubliez pas l'objet d'application. Vous pouvez l'obtenir facilement en appelant Context.getApplicationContext () ou Activity.getApplication ().
Mais pour le AlertDialog()
ni getApplicationContext()
ou getApplication()
est acceptable comme contexte, car il lève l'exception:
"Impossible d'ajouter une fenêtre - le token null n'est pas pour une application"
par références: 1 , 2 , 3 , etc.
Donc, cela devrait-il vraiment être considéré comme un "bug", car il est officiellement conseillé de l'utiliser Activity.getApplication()
et pourtant il ne fonctionne pas comme annoncé?
Jim