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?

InformationsquelleAutor mlevit | 2010-10-18
Schreibe einen Kommentar