Falta de memória no aplicativo Android é muito comum se não manusearmos o bitmap adequadamente. A solução para o problema seria
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);
No código acima, tentei reciclar o bitmap, o que permitirá que você libere o espaço de memória usado, portanto, a falta de memória pode não acontecer. Tentei funcionar para mim.
Se ainda estiver enfrentando o problema, você também pode adicionar essas linhas
BitmapFactory.Options options = new BitmapFactory.Options();
options.inTempStorage = new byte[16*1024];
options.inPurgeable = true;
para mais informações, dê uma olhada neste link
https://web.archive.org/web/20140514092802/http://voices.yahoo.com/android-virtual-machine-vm-out-memory-error-7342266.html?cat=59
NOTA: Devido ao momentânea "pausa" causada pela realização de gc, é que não é recomendado para fazer isso antes de cada alocação de bitmap.
O design ideal é:
Libertar todos os bitmaps que já não são necessários , pelo if / recycle / null
código mostrado. (Faça um método para ajudar nisso.)
System.gc();
Aloque os novos bitmaps.