La réduction de l'Utilisation de la Mémoire dans les Applications Android
J'ai un jeu assez simple qui est sorti sur le Marché en ce moment. C'est un texte simple base de jeu, pas de graphiques 2d ou 3d en cause. Il utilise correctement la taille des png pour les arrière-plans. Autre que cela, il est purement à base de texte.
Il n'y a rien de processeur ou de graphiques intensives sur le jeu, mais il est en moyenne d'environ 25mo de l'utilisation de la mémoire. En comparaison, la plupart des applications qui sont encore plus consommateur d'uc en moyenne environ 18mb.
Dans des applications mobiles, chaque mégaoctet compte, donc que puis-je faire pour bien réduire l'utilisation de la mémoire de mon application? Je sais que cela peut être une vague question, mais je serai heureux de les élaborer, si nécessaire.
Merci
La base du jeu est que vous appuyez sur un bouton et le nouveau texte apparaît sur l'écran. Le bouton appelle une méthode qui extrait le texte à partir d'un fichier texte et l'affiche. Il n'y a pas beaucoup à elle, et c'est pourquoi l'utilisation de 25 mo de mémoire est confus pour moi.
OriginalL'auteur Bert B. | 2011-08-18
Vous devez vous connecter pour publier un commentaire.
La première chose que vous devez faire est de saisir un vidage de la mémoire à partir de votre application lors de l'utilisation de la mémoire est élevée et l'utilisation Eclipse De La Mémoire De L'Analyseur de travailler sur ce qui est réellement la consommation de la mémoire.
EDIT:
Ces liens peuvent être utiles:
Android ==> l'Analyse de la Mémoire ==> Éclipse de la mémoire de l'analyseur?
http://www.vogella.de/articles/EclipseMemoryAnalyser/article.html
Donc j'ai eu un tas de vidage. Je ne suis pas sûr de ce qui est considéré comme "normal" pour les cas soupçonnés de fuites de mémoire. Mon premier soupçonné on dit: à 2 367 des instances de "java.lang.Class", chargé par "<système de chargeur de classe>" occupent 890,944 (35.89%) octets. Et le second dit "7,774 les instances de "java.lang.Chaîne", chargé par "<système de chargeur de classe>" occupent 488,864 (19.69%) octets."
OriginalL'auteur Ian Newson
Tous les composants de la même application s'exécutent dans le même processus et thread. L'utilisation de la mémoire de service peut être aussi grand que l'utilisation de l'ensemble de l'application.
Essayez d'exécuter le service dans un processus distinct de résoudre ce problème.
ajouter
android:process=":yourname"
en AndroidManifest.xml comme ci-dessous:<service android:name=".MyService" android:process=":yourname">
</service>
Dans mon cas, l'utilisation de la mémoire d'une simple modification du service à partir de 12 MO à 3 MO.
android:process
, de sorte qu'il réduit à ~3 MO de ~9 MO. merciConnaissez-vous l'explication de pourquoi cela fonctionne? Merci!!!!
OriginalL'auteur ishitcno1
Si le contenu de vos images comprend tous les articles que vous pourrait les diviser en plusieurs images et de les utiliser comme des tuiles.
Neuf patchs pourrait être utilisé pour le faire facilement, en supposant que vos images respecter les neuf format de patch.
OriginalL'auteur Ian Newson
La réduction de la mémoire qu'on peut avoir quelques éléments téléchargés à partir d'un serveur d'application. Peut-être que certains des documents de texte, ou png fichiers que vous utilisez. Vous avez la majorité de vos ressources installés après l'installation de l'application à partir d'un serveur d'applications telles Amazon s3
EDIT:
Si vous utilisez un tampon de Chaîne, pense qu'il pourrait être à voir avec une performance optimisation de la StringBuffer méthode toString ().
Le Soleil javadoc dit ce qui suit:
Parce que vous peut-être ré-utiliser les StringBuffer avec le setLength(0), il peut être garder une référence à toutes les Chaînes qu'il a créé avec toString().
Remplacer:
.setLength(0);
avec:
"Votre tampon de Chaîne" = new StringBuffer();
et voir si cela résout-il. Je ne pense pas que ce sera plus généraux puisque dans les deux cas, vous aurez besoin de créer un nouveau char tableau [], car dans le premier cas, le tableau est utilisé par la Chaîne créée avec toString().
Aussi, vous devriez envisager d'utiliser un StringBuilder comme ils sont préférés à StringBuffer.
Vérifiez ici
Hmmm....Êtes-vous à l'aide de n'importe quel cache de l'application, ou de n'importe quel type de temporaire ou de longue durée de stockage? Comme SQLite?
Découvrez mon edit
Pas de cache ou SQLite. Cependant, vous apportez un bon point. Afin de récupérer les lignes de texte à partir du fichier texte, j'utilise une instance de BufferedReader et InputStream. Les personnes utilisent une quantité considérable de mémoire?
Oui, reportez-vous à mon montage. Je ne sais pas si tout ce que j'ai indiqué est le cas avec votre application. Depuis je ne peux pas voir le code. Mais reportez-vous au lien en bas de mon montage. Et aussi de lire la Citation de la Java doc
OriginalL'auteur yoshi24