En mi aplicación, cargo un par de imágenes de archivos JPEG y PNG. Cuando coloco todos los archivos en el directorio de activos y la carga de esta manera, todo está bien:excepción OutOfMemory al cargar mapa de bits desde el almacenamiento externo
InputStream stream = getAssets().open(path);
Bitmap bitmap = BitmapFactory.decodeStream(stream, null, null);
stream.close();
return new BitmapDrawable(bitmap);
Pero cuando intento cargar exactamente las mismas imágenes desde la tarjeta SD, me sale una excepción OutOfMemory!
InputStream stream = new FileInputStream("/mnt/sdcard/mydata/" + path);
Bitmap bitmap = BitmapFactory.decodeStream(stream, null, null);
stream.close();
return new BitmapDrawable(bitmap);
Esto es lo que me pasa en el registro:
11-05 00:53:31.003: ERROR/dalvikvm-heap(13183): 827200-byte external allocation too large for this process.
11-05 00:53:31.003: ERROR/GraphicsJNI(13183): VM won't let us allocate 827200 bytes
...
11-05 00:53:31.053: ERROR/AndroidRuntime(13183): Caused by: java.lang.OutOfMemoryError: bitmap size exceeds VM budget
11-05 00:53:31.053: ERROR/AndroidRuntime(13183): at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
...
Por qué puede ocurrir esto?
ACTUALIZACIÓN: Intenté ambos en un dispositivo real: parece que no puedo cargar más de 12 MB de mapas de bits en lo que se denomina "memoria externa" (esto no es una tarjeta sd).
¿En qué condiciones están probando que el código anterior? ¿En emulador o dispositivo real conectando USB? Lo más probable es que su modo USB esté configurado en modo Disco que bloquea la tarjeta SD. – xandy
Ejecuto este código en el emulador. – Fixpoint
¿Cuál es el tamaño de los archivos jpg/png? – Fedor