OutOfMemoryError: el tamaño de mapa de bits supera el presupuesto de VM: – Android

Posible duplicado:
Android: Problema extraño de memoria al cargar una imagen en un objeto Bitmap

Estoy descargando imágenes de Url y mostrándolas. En el momento de la descarga está dando out of memory error : bitmap size exceeds VM budget . Estoy usando dibujable. El código está abajo:

 HttpClient httpclient= new DefaultHttpClient(); HttpResponse response=(HttpResponse)httpclient.execute(httpRequest); HttpEntity entity= response.getEntity(); BufferedHttpEntity bufHttpEntity=new BufferedHttpEntity(entity); InputStream instream = bufHttpEntity.getContent(); Bitmap bm = BitmapFactory.decodeStream(instream); Bitmap useThisBitmap = Bitmap.createScaledBitmap(bm,bm.getWidth(),bm.getHeight(), true); bm.recycle(); BitmapDrawable bt= new BitmapDrawable(useThisBitmap); System.gc(); 

Aquí está el error: 05-28 14:55:47.251: ERROR/AndroidRuntime(4188): java.lang.OutOfMemoryError: bitmap size exceeds VM budget

Use decodeStream(is, outPadding, opts) con

 BitmapFactory.Options opts=new BitmapFactory.Options(); opts.inDither=false; //Disable Dithering mode opts.inPurgeable=true; //Tell to gc that whether it needs free memory, the Bitmap can be cleared opts.inInputShareable=true; //Which kind of reference will be used to recover the Bitmap data after being clear, when it will be used in the future opts.inTempStorage=new byte[32 * 1024]; 

Usted podría comprobar el tamaño de la imagen y luego downsample por factor apropiado.

Vea esta pregunta: Manejo de mapas de bits grandes

Este problema parece haber sido reportado varias veces, aquí y aquí por ejemplo … lo siento Shalini pero si es el mismo problema, parece que no hay solución en absoluto …

El único consejo de Romain Guy es usar menos memoria …

Por lo tanto, buena suerte para pensar sus cosas de manera diferente …

Finalmente, después de volver a muestrear la imagen como se sugirió anteriormente, puede llamar a bitmap_file.recycle () .

El HECHO es que hay un BUG en algunas versiones de Android, particularmente la versión 2.1 falla todo el tiempo con problemas como éste.

He lanzado una aplicación en la que he tenido mucho cuidado en el uso de los recursos. Incluso he eliminado una gran cantidad de mapas de bits que estaba utilizando y ahora se crean sobre la marcha utilizando gráficos primitivos. También reciclo los mapas de bits cuando no los uso. Y por supuesto he comprobado que no tengo fugas de memoria en mi aplicación: la memoria utilizada no crece sin control, se mantiene todo el tiempo dentro de los valores razonables.

Aunque he invertido mucho esfuerzo en tratar de evitar este problema, continúo recibiendo muchas excepciones molestas como eso de los dispositivos 2.1 y 2.1-update1. Estoy usando critercism ahora para reportar fallos, y he visto que se produce incluso cuando la aplicación está usando sólo 4 megabytes de RAM, cuatro veces menos que el 16M de tamaño montón que cada dispositivo Android debe tener para una aplicación y el hecho Es que la mayoría de los dispositivos en estos días tienen tamaños de montón más grande que 16M-.

Todos mis mapas de bits tienen un tamaño de 800×480 píxeles, que en el peor de los casos como ARGB_8888 no puede ocupar más de 1,5 MB cada uno, pero se bloquea tratando de cargar una al tener sólo 4 megabytes ocupados, por lo que debe haber al menos otros 12 MB gratis. Y la mayoría de mis Bitmaps se cargan como ARGB_4444 que ocupa la mitad de la memoria, sólo uso ARGB_8888 cuando los mapas de bits se ve muy pobre con 4444.

Así que para mí es bastante claro que hay algo en estas versiones de Android que no funciona bien. 99'9% de los accidentes provienen de 2.1 y 2.1-update, y el resto puede ser explicado por otras razones puntuales.

He intentado muchas cosas esto es lo que funciona.

 BitmapFactory.Options opts=new BitmapFactory.Options(); opts.inDither=false; //Disable Dithering mode opts.inPurgeable=true; opts.inScale=8; ///after you use your images System.gc(); 

Esta es una respuesta práctica, lo que traté de evitar este problema en tiempo de ejecución. Y también resolvió mi problema.

 Runtime.getRuntime().gc(); 

Llamar al recolector de basura es una buena idea.

  • El tamaño del mapa de bits supera el error de presupuesto de Vm android
  • ¿Cómo cargar imágenes grandes en Android y evitar el error de memoria?
  • Error de memoria al cargar mapas de bits
  • El mapa de bits rotativo hace que outOfMemoryException
  • Bitmap decodeStream OutOfMemory Excepción
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.