2012-05-24 12 views
6

Cuando cambio al modo de paisaje, se crean pocos objetos con mapa de bits de pantalla completa.el tamaño del mapa de bits excede el error de presupuesto de Vm android

Cuando me desplazo otro objeto se llama y se muestra su mapa de bits, cuando haciendo esto en varias ocasiones, el tamaño del mapa de bits excede vm error presupuesto, he hecho todas las cosas como recycle(), establecer nulo y entonces llamado GC(), todavía tengo mismo error. crear mapa de bits ....

bitmap = Bitmap.createBitmap(ChartProperties.getChartWidth(), 
        ChartProperties.getChartHeight(), 
    Bitmap.Config.RGB_565); 

    imageCache.put(String.valueOf(LandscapeChartActivity.getActiveFeature()), 
        new SoftReference(bitmap)); 

    if(imageCache != null){ 

     for (int i = 0; i < imageCache.size(); i++) { 

      if (imageCache.get(String.valueOf(i)) != null) { 
       imageCache.get(String.valueOf(i)).get().recycle(); 
       imageCache.put(String.valueOf(i), null);      
      } 

     } 
     Runtime.getRuntime().gc(); 
     imageCache.clear(); 
     imageCache = null; 
+0

posible duplicado de [OutOfMemoryError: tamaño de mapa de bits supera el presupuesto VM: - Android] (http://stackoverflow.com/questions/2928002/outofmemoryerror-bitmap-size-exceeds-vm-budget -android) –

+2

Cada vez que llamas 'size()' en un bucle, Dios mata a un gatito ... – WarrenFaith

Respuesta

7

También tuve el mismo problema OOME debido a mapas de bits.

Cuando la orientación cambia de PORTRAIT a LANDSCAPE y viceversa, la IU anterior se descarta por completo, y se carga y muestra una nueva IU. En este caso, si usa muchos mapas de bits en la aplicación, debe liberarlos en lugares apropiados.

Para comprobar la orientación de su dispositivo, por favor ver esto: Check orientation on Android phone

En su caso, es necesario borrar los mapas de bits durante el cambio de orientación.

En el enlace de arriba se puede encontrar, cómo obtener la orientación actual. Por lo tanto, en cada cambio de orientación, llame al código anterior que limpia los mapas de bits.

Ahora, al comprobar el Logcat, siempre hay un registro aparece diciendo GC_, pero no podía entender que, por lo He encontrado un documento asombroso en problema de pérdida de memoria: http://codelog.dexetra.com/getting-around-android-memory-blues

El enlace anterior es muy útil para tu problema

Ahora, el OOME se produce cuando hay una pérdida de memoria en su aplicación. Para comprobarlo, instale el MAT para eclipse. Puede encontrarlo en: http://www.eclipse.org/mat/downloads.php

Es un software un poco complicado, pero a medida que avanza, comprenderá que es un software bastante útil.

Incluso si esto no resuelve su problema, use el WeakReference para mapas de bits.

Consulte este enlace: How to use WeakReference in Java and Android development?

Si consigo saber algo más de información, voy a actualizar este post.

Actualice su publicación, si obtiene solución a su problema.

Gracias :)

+0

Gracias, pero en mi código ya borro los mapas de bits mientras cambia la orientación, pero sigue ocurriendo un error al voltear muchas veces .. if (! imagecache = null) { for (int i = 0; i

+0

Sin duda hay una pérdida de memoria en su aplicación, instale MAT para eclipse. Llegará a saber el lugar exacto donde se encuentra la pérdida de memoria para que pueda rectificarlo. – Shrikant

Cuestiones relacionadas