2010-08-31 5 views
4

J'ai une application qui utilise un certain nombre de graphiques. Lorsque j'ouvre et ferme mon application de manière répétée sur mon émulateur (1.5 - 2.2), il fonctionne bien et en vérifiant le tas, je peux voir que tout est nettoyé et gc'd correctement.Raisons pour lesquelles mon application Android planterait sur mon téléphone de manière cohérente, mais pas sur mon émulateur

Cependant, lorsque je lance mon application sur un téléphone HTC Aria (2.1), l'application se bloque chaque fois que j'essaie de l'ouvrir de nouveau. Quand je regarde le tas, je peux voir que les objets ne sont pas nettoyés comme ils le sont dans l'émulateur.

Est-ce que quelqu'un sait pourquoi ce comportement pourrait se produire? Je l'ai essayé sur un autre HTC Aria (un ami) et il s'est écrasé de la même manière que sur mon téléphone, donc je pense que ce n'est pas seulement isolé sur mon téléphone particulier.

Des idées ou des idées seraient vraiment appréciées sur la raison pour laquelle les choses sont nettoyées correctement sur l'émulateur, mais pas sur mon téléphone. Une chose à noter, c'est que je l'ai fait fonctionner et bien sur mon téléphone il ya quelques jours et je n'ai pas beaucoup changé et maintenant il ne fonctionne pas sur mon téléphone, donc c'est un peu un mystère pour moi.

Merci! Remarque:
Le plantage est dû à une exception OutOfMemory. Je suis en train de pré-charger une poignée de graphiques, et il n'y a pas assez de mémoire pour que deux instances de l'application s'exécutent en même temps, ce qui plante car la première instance de l'application n'a pas été nettoyée correctement.

+0

Afficher la pile après la panne – Falmarri

+0

Avez-vous des ressources statiques quelque part? Ou instance statique de singleton, qui contient l'application entière même après la fermeture de l'activité? Effacer toutes ces références dans onDestroy(), cela pourrait aider. – tomash

+0

Je n'ai pas de ressources statiques à part quelques entrées statiques que j'utilise pour une machine d'état. D'autres pensées? – justinl

Répondre

2

Vous avez plusieurs émulateurs, tous exécutant juste cette application, le fermant et le relançant. Votre appareil Android a plusieurs processus en cours d'exécution en même temps, comme la synchronisation d'arrière-plan, la notification Facebook, la notification Twitter, la synchronisation de l'agenda, la synchronisation des contacts, etc. Une façon de voir cela est d'essayer d'imiter l'état de votre appareil Android sur vos différents émulateurs, et de voir si vous pouvez obtenir la même erreur sur les émulateurs. Utilisez certaines applications qui se synchronisent en arrière-plan et d'autres qui utilisent beaucoup de mémoire. Ensuite, vous avez un environnement de test qui imite le monde réel, et vous pouvez changer votre application jusqu'à un état où elle ne plante pas. Peut-être réduire les images autant que vous le pouvez pour faciliter l'utilisation de la mémoire. Rappelez-vous, vous ne pouvez jamais forcer le Garbace Collector à démarrer. Vous pouvez seulement dire au système qu'il est possible de collecter ces déchets.

+0

C'est un très bon point auquel je n'avais pas pensé. Merci! – justinl

Questions connexes