java.lang.OutOfMemoryError: bitmap size exceeds VM budget
Also ich hab ein faul-image-loader für meine ListView
. Ich benutze auch dieses tutorial für eine bessere Speicherverwaltung und haben SoftReference
Bitmap-Bilder gespeichert in mein ArrayList
.
Meine ListView
funktioniert Lasten 8 Bilder aus einer DB dann, wenn der Benutzer scrollt den ganzen Weg nach unten es lädt eine andere 8 usw usw. Es war kein Problem, wenn es etwa 35 Bilder oder weniger, aber nicht mehr und meine app Kraft Schließt mit OutOfMemoryError
.
Die Sache, die ich nicht verstehen kann ist, ich habe meinen code innerhalb eines try-catch:
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 die try-catch-block nicht fangen die OutOfMemory
Ausnahme und von dem, was ich verstehe, ist die SoftReference
Bitmap-Bilder, die gelöscht werden sollen, wenn die Anwendung ausgeführt wird, aus dem Speicher zu stoppen die OutOfMemory
Ausnahme geworfen.
Was mache ich hier falsch?
Du musst angemeldet sein, um einen Kommentar abzugeben.
OutOfMemoryError
ist ein Fehler nicht die Ausnahme, Sie sollten nicht fangen.sehen http://mindprod.com/jgloss/exception.html
EDIT: bekanntes problem, siehe dieses Problem