2011-01-02 19 views
1

Wenn man sich um Bitmap-Speicherverwaltung oder das Recycling von Bitmap in Android kümmern sollte?Recycling-Bitmap in Android

Zum Beispiel gibt es nur wenige Möglichkeiten, um ein Bitmaps in Android erstellen wie folgt

Bitmap.createBitmap 
Bitmap.createScaledBitmap 
BitmapFactory 

Aber wenn Android-Speicher für Bitmap zuweisen, die gelöscht werden müssen, damit in Zukunft Anwendung werden wir Gesicht nicht aus Laufen Speicherfehlerproblem

+0

Das Thema ist interessant, aber bitte fügen Sie einige Interpunktion, um uns zu verstehen, was ist Ihre Frage ... –

+0

Überoptimierung ist die Wurzel allen Übels. Bei Bedarf optimieren und Bitmaps freigeben, wenn sie nicht verwendet werden. – the100rabh

+0

hast du irgendeine Antwort,? – nicky

Antwort

1

In Android-Versionen vor 3.0 sind die Bitmaps außerhalb der VM zugeordnet. Android holt diesen Speicher in der finalize() -Methode von Bitmap zurück. Sie können Android den Speicher schneller zurückgeben lassen, indem Sie Bitmap.recycle() aufrufen, anstatt darauf zu warten, dass der GC finalize() für sie aufruft.

Dies ist nur ein Problem, wenn Sie eine Menge der Bitmaps erstellen und verwerfen. Das heißt, wenn Sie Speicher schneller reservieren, kann der GC den zurückgelassenen Müll bereinigen. An diesem Punkt erhalten Sie einen OutOfMemoryError.

In Android 3.0 und höher ist der Bitmap-Speicher innerhalb der VM zugeordnet, so kann Bitmap-Speicher zurückgewonnen werden, ohne dass finalize() aufgerufen werden muss.

0

Sie recyceln die Bitmap, wenn Sie sie nicht benötigen. Beispiel

@Override 
protected void onPause(){ 
    super.onPause(); 
    if(bitmap !=null){ 
     bitmap.recycle(); 
     bitmap = null; 
    } 
} 
@Override 
protected void onResume() { 
    super.onResume(); 
    if(bitmap !=null){ 
     bitmap.recycle(); 
     bitmap = null; 
    } 
} 

PS Bitmaps Speicher handeln verschieden sind Vorrichtungen, bedeuten, was i

Growing Heap 

von der Vorrichtung verschieden ist bis zu einem anderen beispielsweise Bitmap-Größe nicht überschreiten kann VM Budget (Growing Heap) 240MB auf dem S4 tested and confirmed by personal testing und es verursacht nicht OutOfMemoryError aber in einigen anderen Geräten, wenn die Bitmap-Größe (Growing Heap) bis zu 16 MB überschreiten kann es OutOfMemoryError seine ganz anders als Gerät zu einem anderen, weil einige Geräte großen Haufen hat, während einige nicht . und vertraue mir, mit Growing Heap umzugehen, ist keine leichte Aufgabe. zusätzlicher Rat ist, android:largeHeap="true" in Ihrem application Tag innerhalb des Manifests zu verwenden. `

+0

Setzen Sie das Objekt auf null, und dann recycle für dieses Objekt aufrufen? –

+0

es sollte das Gegenteil sein, wie @ Software.Developer sagte, und für ein vollständiges Beispiel über das Laden großer Bitmaps effektiv, werfen Sie einen Blick auf die offizielle Dokumentation: http://developer.android.com/training/displaying-bitmaps/index. html – Houcine

Verwandte Themen