3 Stimmen

Wie verwendet man Bitmap-Recycling in Android?

Ich habe ein Problem mit dem Bitmap-Recycling. Ich zeige die Bitmaps in einer Pulltorefreshlistview an. Ich habe etwa 30-50 Bilder zum Herunterladen zusammen mit etwas Text von Webservice-Funktion. Ich verwende Lazyloading von Bildern und lade Bilder herunter und dekodiere sie auf 80x80 Größe. Mein Problem ist, dass ich OutOfmemoryError bekomme. Also habe ich einige R und D und wissen, dass Bitmaps waren nicht GC'd sofort. Also möchte ich recycle() die Bitmaps für die Rückgewinnung des Speichers zu tun. wo zu recycle() auf Bitmaps aufrufen. Ich verwende berühmte Faulenzerliste . in diesem unten Code nach der Einstellung Bitmap, habe ich versucht, bitmap.recycle() zu tun. Ich habe keine Fehler wie andere auf Stackoverflow berichtet, aber seltsame Sache ist listitems sind leer angezeigt. Ich frage mich, dass, wenn ich recycle() Bitmap, warum die textviews, in der gleichen Zeile betroffen sind. Da gibt es große Anzahl von Bildern meine app Absturz sehr bald. Ich möchte auch fragen, wie man alle Bilder in Listview auf einmal zu recyceln. bitte jemand mir helfen.

//Used to display bitmap in the UI thread
    class BitmapDisplayer implements Runnable
    {
        Bitmap bitmap;
        PhotoToLoad photoToLoad;
        public BitmapDisplayer(Bitmap b, PhotoToLoad p){bitmap=b;photoToLoad=p;}
        public void run()
        {
            if(imageViewReused(photoToLoad))
                return;
            if(bitmap!=null)
                photoToLoad.imageView.setImageBitmap(bitmap);
            else
                photoToLoad.imageView.setImageResource(stub_id);
        }
    }

0voto

Tadeas Kriz Punkte 524

Wir verwenden diese Bibliothek: Android HttpImageManager

Es ist einfach, mit Listen zu verwenden, und ich habe nie eine OutOfMemoryException mit ihm. Es zwischenspeichert die Bitmap im Speicher und auch im Dateisystem (Sie können dieses Verhalten ändern).

Ich würde Ihnen auch empfehlen, die Größe von Bitmaps nicht auf dem Telefon zu ändern, sondern dies per Fernzugriff auf dem Server zu tun, wenn Sie können (natürlich haben Sie diese Möglichkeit vielleicht nicht).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X