Fuite de mémoire Android?
Je pense que mon application android est une fuite de mémoire. Je ne suis pas absolument sûr que ce soit le problème.
Chaque tellement souvent, l'application se bloque lors de l'ouverture, et logcat montre un "out of memory" exception d'une tentative de chargement d'une image bitmap.
Après un crash, je l'ai ré-ouvrez l'application et il fonctionne très bien. Logcat montre beaucoup de "gc"s et à chaque fois dans un tandis que l'équipe de la table est redimensionnée vers le haut, jamais vers le bas jusqu'à ce que l'application se bloque avec l'erreur de mémoire insuffisante.
Est-ce son comme une fuite de mémoire? Si oui, comment dois-je aller sur la localisation et la fermeture de la fuite.
Voici ma commande adb shell meminfo pour mon application.
** MEMINFO in pid 2691 [com.example.deepcliff] **
native dalvik other total
size: 23264 8839 N/A 32103
allocated: 12503 3826 N/A 16329
free: 168 5013 N/A 5181
(Pss): 2512 1395 13815 17722
(shared dirty): 2088 1844 5008 8940
(priv dirty): 2412 224 11316 13952
Objects
Views: 0 ViewRoots: 0
AppContexts: 0 Activities: 0
Assets: 2 AssetManagers: 2
Local Binders: 55 Proxy Binders: 13
Death Recipients: 1
OpenSSL Sockets: 0
SQL
heap: 129 MEMORY_USED: 129
PAGECACHE_OVERFLOW: 9 MALLOC_SIZE: 50
DATABASES
pgsz dbsz Lookaside(b) Dbname
1 14 10 webview.db
1 6 18 webviewCache.db
Asset Allocations
zip:/data/app/com.example.deepcliff-2.apk:/resources.arsc: 17K
source d'informationauteur Arjun
Vous devez vous connecter pour publier un commentaire.
Ici sont un couple des articles et des postes, qui probablement vous aider à obtenir sur la bonne voie:
Allocation trackerqui est livré avec Android SDK est très utile. Lire Romain Guy statuts. Il m'a aidé à traquer assez méchant fuites. Il vous aide également à mieux écrire le logiciel. E. g. J'ai appris à créer moins d'objets, utiliser plus de StringBuilder, et cache beaucoup plus:
Ce Android outils et les méthodes qui fonctionnent le mieux pour trouver de la mémoire/ressources des fuites?
Parfois, votre application est tellement foiré que vous avez à faire une re-conception dans l'ensemble. Voici officiel, de bons conseils pour que (mon préféré est le Éviter de Créer des Objets Inutiles):
http://developer.android.com/guide/practices/design/performance.html
Voici un excellent article sur attaquer à vos problèmes de mémoire:
http://ttlnews.blogspot.com/2010/01/attacking-memory-problems-on-android.html
Officiel article sur la façon d'éviter les fuites de mémoire:
http://android-developers.blogspot.co.uk/2009/01/avoiding-memory-leaks.html
Lire également ceci: outil pour vérifier les fuites de mémoire dans android
D'autres, déjà signalé à propos de bitmaps. Voici un article décrivant le problème: http://zrgiu.com/blog/2011/01/android-bitmaps-and-out-of-memory-errors/
Ce n'est pas une fuite de mémoire. Les appareils Android seulement ont une quantité limitée de mémoire et de votre bitmap doit juste être trop grand. Vous avez besoin de trouver un moyen de réduire la taille de vos images. Je ne peux vraiment pas vous en dire beaucoup plus parce que vous n'avez pas donné beaucoup de.
Une valeur typique de max VM taille de segment de mémoire est de 24 MO. Ainsi, par exemple, si votre image est 10Mpx (3600 x 2400), alors il faudrait allouer 3600 x 2400 x 4 = 34'560'000 octets qui est un
OutOfMemoryError
cas.Lorsque vous traitez avec des Bitmaps dans android, assurez-vous de recycler l'image bitmap à chaque fois que vous avez terminé de l'utiliser. Vous pouvez charger un redimensionnement d'image bitmap en définissant la inSampleSize option. Plus de détails ici: http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inSampleSize