La falta de memoria en la aplicación de Android es muy común si no manejamos correctamente el mapa de bits.La solución al problema sería
if(imageBitmap != null) {
imageBitmap.recycle();
imageBitmap = null;
}
System.gc();
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 3;
imageBitmap = BitmapFactory.decodeFile(URI, options);
Bitmap scaledBitmap = Bitmap.createScaledBitmap(imageBitmap, 200, 200, true);
imageView.setImageBitmap(scaledBitmap);
En el código anterior, acabo de intentar reciclar el mapa de bits, lo que le permitirá liberar el espacio de memoria utilizado, por lo que es posible que no se agote la memoria. Lo intenté y funcionó para mí.
Si aún enfrenta el problema, también puede agregar estas líneas
BitmapFactory.Options options = new BitmapFactory.Options();
options.inTempStorage = new byte[16*1024];
options.inPurgeable = true;
para más información echa un vistazo a este enlace
https://web.archive.org/web/20140514092802/http://voices.yahoo.com/android-virtual-machine-vm-out-memory-error-7342266.html?cat=59
NOTA: Debido a la momentánea "pausa" causado por la realización de GC, se no se recomienda hacer esto antes de cada asignación de mapa de bits.
El diseño óptimo es:
Libere todos los mapas de bits que ya no sean necesarios , mediante el if / recycle / null
código que se muestra. (Crea un método para ayudarte con eso).
System.gc();
Asigne los nuevos mapas de bits.