2010-11-03 4 views
0

ma performance de l'application android est faible. de logcat j'ai trouvé que le facteur de temps est la collecte de place. il consomme au moins 110ms dans chaque gc. gc montre fréquemment. Y at-il de toute façon de déterminer les objets collectés ??android déterminer objet libéré GC

+0

Est-ce que c'est dans l'émulateur ou sur un vrai téléphone? – Khalos

+0

Espérons que vous n'utilisez pas la classe d'exécution pour libérer gc manuellement n'importe où – DeRagan

+0

@khalos c'est le vrai téléphone – asifkt

Répondre

1

Regardez les vidéos dans le http://developer.android.com/videos/index.html

Surtout celui de parler sur « Faites de votre interface utilisateur plus rapide », il y a beaucoup de conception des meilleures pratiques présentées dans les vidéos.

Il va certainement aider votre application à courir plus vite.

+0

Dans mon application, je dois analyser le fichier XML téléchargé à partir du serveur . pour analyser les données provenant de chaque balise i utilisé la méthode montre ci-dessous les caractères public void (char ch [], début int, int longueur) { \t \t \t \t \t if (in_mapData) { \t \t if (this.in_evtUrl) {\t myXmlDataSet.setExtractedEvtUrl (nouvelle chaîne (ch, start, length)); } cette méthode est appelée pour chaque lecture de contenu d'étiquette. Est-ce la raison de la collecte de gargarismes depuis que j'utilise la nouvelle méthode String() fréquemment? Si oui, donnez-moi un substitut à cette méthode. – asifkt

+0

Vous devrez suivre vos méthodes pour vérifier qui génère des déchets. C'est vraiment difficile à trouver avec le code seul. Vous pouvez essayer et utiliser une implémentation d'analyse différente. – srinathhs

+0

J'ai utilisé une classe qui étend DefaultHandler pour gérer la gestion XML. en lisant les données xml je reçois le tableau char. Pour obtenir la chaîne, je dois la convertir en chaîne en appelant la nouvelle méthode String().Je pense que c'est la raison pour GC.Si je reçois les données en tant que chaîne puis-je résoudre ce problème ??? alors quelle est la classe d'analyse xml pour obtenir des données en tant que chaîne. J'utilise HTC wildfire avec Android version 2.1. – asifkt

1

Ce n'est pas une valeur étrange pour Android GC. Les valeurs ~ 100ms et ~ 500K sont assez moyennes mais cela dépend bien sûr des spécifications du projet. Le vrai problème est dans la fréquence à laquelle votre code provoque l'appel du GC.

Voici un exemple: Si vous implémentez des listes via le ListView et certaines Adapters personnalisées, vous pourriez obtenir les pires performances jamais obtenues et les meilleures en fonction de la façon dont vous écrivez votre code pour elles. Si vous n'optimisez pas les listes et ne créez pas de nouvelle vue (en la gonflant depuis le fichier .xml), vous recevrez très souvent des appels GC, ce qui est perçu comme de petits hickups ou des raccrochements dans l'interface utilisateur.

La meilleure méthode pour déterminer les causes du problème GC est de le localiser. Commencez votre application et utilisez-la une partie à la fois tout en surveillant le DDMS pour les gumps du GC et ensuite voir quel élément ou activité provoque la plupart d'entre eux et aller de là.

Essayez également la surveillance de l'utilisation de la mémoire avec certains outils. Par exemple, si vous utilisez Eclipse, il existe un outil appelé MAT qui vous donnera un peu plus d'informations sur l'utilisation des objets tout au long de votre projet.

2

Dans l'outil DDMS, accédez à l'onglet "Allocation Tracker". Sélectionnez votre application dans la liste, puis cliquez sur "Démarrer le suivi". Après avoir utilisé l'application pendant un moment, sélectionnez "Obtenir les allocations".

Ceci vous montrera la liste des 512 allocations les plus récentes, avec des tailles et des traces de pile. A partir de là, vous devriez être capable de dire ce qui est en train de manger la mémoire et de provoquer les GC.

+0

Dans mon application, pour chaque action tactile, appelant une nouvelle classe interne qui étend asyncTask. Devrais-je besoin de construire de nouvelles classes sur chaque action tactile? si je crée la classe interne comme statique et appelez cette classe au lieu d'appeler "nouvelle classe.execute (paramètre)" puis-je améliorer les performances? – asifkt

+0

Je ne sais pas. Vous voudrez peut-être ouvrir une nouvelle question pour cela. – fadden

Questions connexes