2011-05-02 21 views
6

Estoy trabajando en una aplicación de cámara. Por primera vez si la captura de imágenes de su funcionamiento muy bien, pero si tomo una imagen más su lanzando un error decómo borrar el montón?

ERROR/dalvikvm-heap(2398): 10077696-byte external allocation too large for this process." VM won't let us allocate 10077696 bytes" and finally"05-02 05:35:38.390: ERROR/AndroidRuntime(2398): FATAL EXCEPTION: main 05-02 05:35:38.390: ERROR/AndroidRuntime(2398): java.lang.OutOfMemoryError: bitmap size exceeds VM budget

y closes..how fuerza de aplicación para manejar esto cómo borrar montón y vm? por favor ayuda .. Gracias de antemano ..

Respuesta

4

Encontré la respuesta.
He utilizado el siguiente código:

BitmapFactory.Options bfOptions=new BitmapFactory.Options(); 

       bfOptions.inDither=false;      //Disable Dithering mode 

       bfOptions.inPurgeable=true;     //Tell to gc that whether it needs free memory, the Bitmap can be cleared 

       bfOptions.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 

       bfOptions.inTempStorage=new byte[32 * 1024]; 
    CameraTricks.SdCardImage= BitmapFactory.decodeFile(CameraTricks.yu,bfOptions); 
CameraTricks.yu is my path to bitmap 
+0

Probé esta opción, esto parece funcionar para la API 2.3. Pero no en API de menos de 2.3. El problema parece ser con esta línea, 'bfOptions.inTempStorage = new byte [32 * 1024]; 'VM no nos permite aumentar su capacidad de almacenamiento. –

+0

NO TAMBIÉN FUNCIONA PARA 2.2 Y 2.1 SIN NINGÚN PROBLEMA – Sando

+0

¿Qué hay de 2.3 y superior. – RobinHood

1

Usted no lo hace. Puedes reiniciar suavemente el dispositivo, pero dudo que sirva para nada. El recolector de basura de Android debería encargarse de eso.

Lo más probable es que su aplicación esté utilizando demasiada memoria para algunas operaciones. Puede usar DDMS para verificar el consumo de memoria (read about it here).

Usted puede leer acerca de problemas similares en todos estos enlaces:

Parece que un tema común es la carga de varias imágenes grandes. Asegúrese de no mantener referencias a imágenes (o cualquier otro objeto grande) que ya no use, para que el recolector de basura pueda recuperar esa memoria. Use Bitamp.recycle(), por ejemplo.

Por último, asegúrese de leer el artículo Avoiding Memory Leaks.