Bonjour
j'ai un problème de mémoire dans mon application que je n'arrive pas à comprendre.
Lors ce que je navigue au travers des activités il arrive un moment ou elle plante avec :
08-02 10:55:22.778: E/dalvikvm-heap(990): 1354752-byte external allocation too large for this process.
08-02 10:55:22.778: E/dalvikvm(990): Out of memory: Heap Size=9415KB, Allocated=5686KB, Bitmap Size=14337KB
08-02 10:55:22.778: E/GraphicsJNI(990): VM won't let us allocate 1354752 bytes
et cela sur n'importe quelle activité.
Les caractéristiques de mon application:
- Toute les activités sont en noHistory
- Les interfaces se compose de maximum 10 images pour l'interface
- Elle se compose d'une activités contenant une liste complexe (qui pourrais être la source de ce problème) ou chaque cellule se compose de 10 images. Le nombre d’élément dans la liste est d'environ 15-20 pour le moment (c'est une boite de réception de message)
J'ai regarder sur internet et j'y ai vu que c'était lier à un problème d'image. J'ai donc réduit au maximum les images de toute l'interface et l'ai mis un système de cache d'image pour la liste :
a la suite de cela le problème met plus longtemps à se manifester mais persiste tout de même.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 public class ImageCache { private HashMap<Integer, Drawable> cacheList = new HashMap<Integer, Drawable>(); private static ImageCache uniqueInstance; private Application application; private ImageCache() { } public static synchronized ImageCache getInstance() { if (uniqueInstance == null) { uniqueInstance = new ImageCache(); } return uniqueInstance; } public void initCache(Application application){ this.application = application; } public Drawable getDrawable(Integer ressource) { if (cacheList.containsKey(ressource)) { return cacheList.get(ressource); } else { Drawable img = application.getResources().getDrawable(ressource); cacheList.put(ressource, img); return img; } } }
Je suis un peu perdu et je ne comprend pas non plus pourquoi en noHistory les données des Activités ne se vide pas.
J'ai regarder l'utilisation mémoire sur le DDMS, il reste dans les 70-80% et explose d'un coup (a ce que j'ai comprit)
Pardon de ne pas vous donner plus d'élément mais si vous avez des hypothèses je vous en dirais plus (comme je vous ai dit je ne sais pas du tout pourquoi sa fait ça)
MERCI A TOUS !!!!
Partager