J'ai suivi l'article "Éviter les fuites de mémoire" de aquí .
Cependant, la solution proposée ne résout pas le problème des fuites. Je l'ai testé avec l'émulateur Android sur Windows XP (SDK 2.3.1). J'ai vidé le tas et vérifié que l'activité principale est toujours dans le tas (j'ai utilisé MAT).
Voilà ce que j'ai fait :
- créer une application HelloWorld avec HelloWorldActivity (elle n'a pas de vues enfant)
- Exécutez l'émulateur et lancez l'application HelloWorld.
- Fermez-la en cliquant sur la touche retour.
- Cause gc dans DDMS et dump heap <-- Ici j'ai trouvé l'instance HelloWorldActivity.
- Le chemin vers les racines du GC montre le chemin suivant.
HelloWorldActivity <- PhoneWindow$DecorView <- InputMethodManager
InputMethodManager est un singleton et trois références à DecorView qui fait référence à HelloWorldActivity.
Je ne comprends pas pourquoi InputMethodManager continue à référencer l'instance DecorView même après la destruction de l'activité.
Existe-t-il un moyen de s'assurer que l'activité principale est détruite et GC-able après sa fermeture ?