J'ai une application Android qui dans la méthode onCreate(), précharge beaucoup de graphiques.Dans mon application Android, à chaque fois que je lance mon application, elle se bloque avec l'exception OutOfMemory
Lorsque je teste mon application sur mon HTC Aria et la lance, elle fonctionne correctement. Toutefois, si j'appuie sur le bouton Précédent pour quitter mon application, puis redémarrer l'application, elle se bloque avec une erreur OutOfMemoryError: la taille de l'image dépasse le budget de la machine virtuelle. Si je lance ensuite l'application pour la troisième fois (juste après qu'il s'est écrasé), il se lance très bien. Ensuite, si je le ferme et le relance, il se bloque de nouveau avec un manque de mémoire. Il continue pour toujours ce motif qui s'écrase à chaque fois si je continue d'essayer. J'ai vérifié pour voir quelles méthodes de cycle de vie ont été appelées et onStop() et onDestroy() sont tous deux appelés quand je quitte l'application, mais j'ai le sentiment que quelque chose n'est pas encore nettoyé et que par " s'écraser "l'application quand j'essaie de le lancer la deuxième fois, il est en quelque sorte libre de la mémoire.
Des pensées sur ce qui pourrait se passer ou comment y remédier? S'il vous plaît laissez-moi savoir si vous avez besoin de moi pour poster plus d'informations. Merci!
Info:
Mon application est assez simple et n'a que 1 activité qui joue des animations d'image.
Je vais enquêter là-dessus. Jusqu'à présent, j'ai annulé toutes les variables membres de mon application. Et j'ai mis tous les rappels Drawable à zéro mais je reçois toujours les mêmes problèmes. Je vais essayer d'utiliser le MAT et voir si je peux obtenir un peu plus d'informations – justinl
Fixe-le! Ce lien attaquant les problèmes de mémoire était une excellente lecture sur la façon d'utiliser correctement l'outil MAT Analyzer. Il s'avère que j'avais quelques vues et j'ai dû mettre la ressource d'arrière-plan à 0 comme ceci: myView.setBackgroundResource (0); Si vous ne le faites pas explicitement, le système conservera cette ressource, même si vous définissez la vue sur null. – justinl
Je voudrais également ajouter que si vous avez défini des dispositions dans votre code, c'est une bonne idée d'appeler myLayout.removeAllViews(), sinon elles peuvent conserver des références à des choses qu'elles ne devraient pas faire après la fermeture de votre application. – justinl