java.lang.OutOfMemoryError: Bitmap-Größe überschreitet VM-Budget
So habe ich ein Lazy Image Loader für meineListView
. Ich benutze auchdieses Tutorial für eine bessere Speicherverwaltung und habenSoftReference
Bitmap-Bilder, die in meinem @ gespeichert siArrayList
.
MyListView
works lädt 8 Bilder aus einer Datenbank, und sobald der Benutzer ganz nach unten gescrollt hat, lädt er weitere 8 usw. usw. Es gab kein Problem, wenn es ungefähr 35 Bilder oder weniger gab, aber keine mehr und meine App schließt mitOutOfMemoryError
.
Das, was ich nicht verstehen kann, ist, dass ich meinen Code in einem Versuchsfang habe:
try
{
BitmapFactory.Options o = new BitmapFactory.Options();
o.inJustDecodeBounds = true;
BitmapFactory.decodeByteArray(image, 0, image.length, o);
//Find the correct scale value. It should be the power of 2.
int width_tmp = o.outWidth, height_tmp = o.outHeight;
int scale = 1;
while(true)
{
if(width_tmp/2 < imageWidth || height_tmp/2 < imageHeight)
{
break;
}
width_tmp/=2;
height_tmp/=2;
scale++;
}
//Decode with inSampleSize
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inSampleSize = scale;
bitmapImage = BitmapFactory.decodeByteArray(image, 0, image.length, o2);
}
catch (Exception e)
{
e.printStackTrace();
}
Aber der try catch-Block fängt das @ nicht OutOfMemory
Ausnahme und von dem, was ich verstehe, dieSoftReference
Bitmap-Bilder sollten gelöscht werden, wenn der Speicher der Anwendung zur Neige gehOutOfMemory
Ausnahme wird geworfen.
Was mache ich hier falsch?