2012-05-23 2 views
0

Je reçois la fameuse erreur de mémoire. Mais j'ai essayé beaucoup de solutions suggérées sur ce problème sans n'importe quelle chance. Je comprends que pour empêcher un bitmap de dépasser la mémoire, vous faites une variable statique du drawable (docs Android). Mais cela ne fonctionne pas dans mon application parce que j'ai autant de marqueurs que vous pouvez voir ..Bitmap Android hors erreur de mémoire (mapviewBalloons)

Quelqu'un at-il une suggestion à une solution?

for(Poi p : poiarray){ 

       WeakReference<Bitmap> bitmap = new WeakReference<Bitmap>(p.get_poiIcon()); 
       if(bitmap!=null){ 

        Drawable marker = new BitmapDrawable(Bitmap.createScaledBitmap(bitmap.get(), 60, 60, true)); 
       annotationOverLays.add(new CustomAnnotation(marker,p,this,mapView));  
       //mapView.getOverlays().add(new CustomAnnotation(marker,p,this,mapView)); 
       } 
      } 
      mapView.getOverlays().addAll(annotationOverLays); 

ERREUR:

05-23 13:08:31.436: E/dalvikvm-heap(22310): 20736-byte external allocation too large for this process. 
05-23 13:08:31.436: E/dalvikvm(22310): Out of memory: Heap Size=23111KB, Allocated=22474KB, Bitmap Size=1505KB 
05-23 13:08:31.436: E/GraphicsJNI(22310): VM won't let us allocate 20736 bytes 

EDIT:

Je pense que je l'ai peut-être localisé le problème .. Je peux déclencher cette exception OutOfMemory si je clique sur plusieurs des annotations. J'utilise le mapViewBalloons de Here, et quand j'ai ouvert fermé 2 plusieurs fois, mon application se bloque à l'exception. Quelqu'un a un problème similaire?

Répondre

1

Il y a beaucoup de façons de résoudre le de exeption de mémoire. Essayez de définir inPurgeable sur votre BitmapFactory.Options http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inPurgeable

ou d'essayer un PurgeableBitmap. http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/PurgeableBitmap.html

Mettre à l'échelle les images à une plus petite taille. Si vous avez une vue avec un adaptateur faites une liste avec FIFO et taille fixe ...

1

J'ai eu le même problème et le code suivant a fonctionné pour moi:

public static Bitmap decodeFile(File f, boolean goodQuality){ 
     try { 
      //Decode image size 
      BitmapFactory.Options o = new BitmapFactory.Options(); 
      o.inJustDecodeBounds = true; 
      BitmapFactory.decodeStream(new FileInputStream(f),null,o); 

      //The new size we want to scale to 
      final int REQUIRED_SIZE=100; 

      //Find the correct scale value. It should be the power of 2. 
      int scale=1; 
      if(!goodQuality){ 
       while(o.outWidth/scale/2>=REQUIRED_SIZE && o.outHeight/scale/2>=REQUIRED_SIZE) 
        scale*=2; 
      } 
      //Decode with inSampleSize 
      BitmapFactory.Options o2 = new BitmapFactory.Options(); 
      o2.inSampleSize=scale; 
      return BitmapFactory.decodeStream(new FileInputStream(f), null, o2); 
     } catch (FileNotFoundException e) {} 
     return null; 
    } 
Questions connexes