Ich habe ein Speicherleck in dieser Datei, ich kann nicht genau wo finden, aber ich denke, ist das Bild um - & gt; (Bitmap bm = BitmapFactory.decodeFile(filename))
, Ich habe viele verschiedene Möglichkeiten ausprobiert, aber ich kann es nicht zum Laufen bringen.
Fehlerprotokoll
%Vor% Bitmaps sind sehr große Speicherverbraucher. Zwei in den Speicher geladen zu haben, könnte das große Problem sein. Sie sollten BitmapFactory.Options in Erwägung ziehen, wenn Sie eine neue Bitmap dekodieren. Außerdem benötigen Sie bm2
nicht. Ersetzen Sie stattdessen diese Zeile durch Folgendes:
Wenn Sie keine weiteren Optionen haben, können Sie die Größe der Heap-Größe Ihrer Anwendung mithilfe des Anwendungsattributs android:largeHeap="true"
in Ihrer AndroidManifest.xml erhöhen. Diese Option sollte nicht benötigt werden - und sollte nur für extrem grafikintensive Anwendungen in Betracht gezogen werden.
BEARBEITEN
Ein weiterer Link, den Sie für die Optimierung der Bitmap-Nutzung hilfreich finden können: Ссылка
Bitmaps verbrauchen viel Speicher ist klar. Sie müssen sich um Folgendes kümmern, um Bitmaps effektiv zu verwenden:
CreateBitmap
, da es die gesamte Datei liest und viel mehr Speicher benötigt. Stattdessen verwende BitmapOptions
und verkleinere es. Um es zu verkleinern, müssen Sie zunächst Ihre Optionen festlegen und diese Optionen dann als Parameter für Ihren CreateBitmap
-Aufruf verwenden. Hier ist ein schöner Link. Wenn Sie mehr über stackoverflow suchen, finden Sie weitere interessante Antworten. Einige allgemeine Hinweise:
Bitmap
Objekte in Android viel Speicher. Sie sollten immer SoftReferences
verwenden, um Bitmaps zu halten, damit das Betriebssystem den Speicher bei Bedarf freigeben kann. recycle()
-Methode verwenden, um Transformations-Bitmaps (dh Ihre bm2
-Variable) wegzuwerfen, wenn Sie damit fertig sind. NULL
setzen, wenn Sie damit fertig sind, empfiehlt es sich, auf den Garbage Collector hinzuweisen, dass sie gesammelt werden können. In der Regel führt das manuelle Aufrufen des gc in Android jedoch zu schlechteren oder keinen Auswirkungen. ddms
! Ja Ein Speicher-Cache bietet einen schnellen Zugriff auf Bitmaps auf Kosten des wertvollen Anwendungsspeichers. Wenn LruCache das Problem nicht lösen kann, versuchen Sie Folgendes: < a href="http://blog.pseudoblue.com/2010/08/15/android-bitmaps-and-memory-leaks/"> ImageManager , in der Klasse ImageManager gibt es eine Methode recycleBitmaps.
Tags und Links memory-leaks android android-asynctask bitmap