2011-10-19 10 views
7

Estoy usando createBitmap() en varios lugares. Algunas veces esta API arroja la excepción OutOfMemoryError(). ¿Cómo evitar esta excepción?Cómo evitar la caída de createBitmap() en android

estoy usando, como a continuación,

createBitamp(width, height, Config.ARGB_8888); 

width = width de la pantalla

height = height de la pantalla

Cualquier ayuda se agradece.

+0

lea esta publicación en el blog http://codingaffairs.blogspot.com/2016/07/processing-bitmap-and-memory-management.html –

Respuesta

5

Muchos enfrentan este problema. Tiene tres maneras de resolver el proble:

  • aumentar la memoria disponible: detenga los servicios, o cambiar el dispositivo a un uso de memoria de un
  • Disminución más reciente: a través de la optimización de su código
  • [ACTUALIZACIÓN] Elementos gratuitos sin usar Memoria de mapa de bits: llame al recycle().
  • [ACTUALIZACIÓN] No utilice garbagecollector :)

Por lo general, los problemas de mapa de bits, recolector de basura ayudará.

Respuesta de Justin Breitfeller links a una explicación más detallada del funcionamiento interno del mapa de bits. El mensaje que se debe quitar es que la memoria asignada para los datos del mapa de bits (en el método native createBitmap) se trata de manera algo separada, y GarbageCollector no la libera directamente cuando Bitmap se convierte en basura. La solución real es reciclar() sus bitmaps cuando no los usa. Esto mantendrá la memoria (pequeña) asignada para el objeto Bitmap, pero marque la memoria (grande) asignada para la recolección de basura de datos de mapa de bits. Por lo tanto, GarbageCollector liberará ambos, pero no tiene que llamarlo manualmente, antes de que ocurra una OutOfMemory, JVM intentará GarbageCollect de todos modos.

+0

System.gc() parece que funciona ¡mejor para mí! ¡¡Gracias!! –

Cuestiones relacionadas