Ich denke, es ist gefragt und vor gefragt, aber dennoch gibt es Dinge, die ich nicht ganz verstehen kann.
Ich habe zwei verschiedene Ansätze ausprobiert:
In 2. es ist nur die Reinigung manchmal die Sekunde, die ich ihnen zuteile! Und ich zuteile nicht zu viel - 30-40 Bilder 50x50 Pixel.
Also bleibe ich bei einem. Die Frage ist, was ist die Grenze?
Wichtigste Frage: Haben Sie Ihre Bitmaps recycle()
? Dies ist sehr wichtig für Pre-Gingerbread-Anwendungen (vielleicht auch Post-Gingerbread).
Speicherverwaltung für Android-Apps von Google I / O 2011 hat mir geholfen, die Besonderheiten der Entwicklung für Android besser zu verstehen.
In diesem Video wird ein Tool mit dem Namen MAT - ein Memory Analyzer erwähnt, mit dem Sie feststellen können, ob Sie das getan haben in der Erinnerung herumhängende Objekte, die durchgesickert sind. Es ist möglich, dass du mehr als die 30-40 hast, die du zu haben glaubst.
Zum Anzeigen und / oder Protokollieren der aktuellen Größe des Heapspeichers usw. würde ich vorschlagen, den Code in diese Antwort zu Android Out of Memory-Ausnahmen .
Das Zwischenspeichern von Bildern war ein wesentlicher Bestandteil einer App, die ich erstellt und in den App Store gestellt habe. Die App muss Bilder herunterladen und sie sowohl im Speicher als auch auf der SD-Karte zwischenspeichern, so dass ihr Umfang sich über einen einzelnen Durchlauf hinaus erstreckt.
Die allgemeine Idee bestand darin, die Bilder einem Caching-Manager hinzuzufügen, der a) das Bild in einem assoziativen Container (HashMap) über einen Schlüssel basierend auf den Metadaten speichert und b) die Bilddatei auf die SD-Karte schreibt .
Während niedriger Speicherbedingungen gebe ich die HashMap frei. Dennoch können Bilder immer noch von der SD_Card abgerufen und erneut in den Speicher zwischengespeichert werden.
Ich konnte das ohne Recycling machen und sehe immer noch keine Speicherprobleme. Wie ich es verstehe, ist Recycling nicht notwendig, aber hilft, eine frühere Freigabe von Speicher für "Bitmaps" zu erhalten, da die Zuteilung für Bitmaps in Pre-Gingerbread-Betriebssystemen Native Memory verwendet. d.h. Speicher, der nicht Teil des Dalvik-Heaps ist. Der Garbage Collector befreit diesen Speicher also nicht, vielmehr wird er durch implementierungsspezifische Richtlinien freigegeben.
Dies stammt aus der Cache_Manager-Klasse:
%Vor%// Hier ein Beispiel für writeImage () aus der File_Manager-Klasse
%Vor%Das Limit bezieht sich auf die VM-Heap-Größe auf dem Gerät, auf dem es ausgeführt wird, da dies von Gerät zu Gerät und Betriebssystem zu Betriebssystem von 16 MB (insgesamt für die App) bis 256 MB (auf Tablets) reicht / p>
Sie müssen es entweder unter dem unteren Ende halten, verschiedene Builds pro Gerät erstellen oder die App zur Laufzeit prüfen lassen, was die Erlaubnis ist, und Ihre Bilder entsprechend laden.
Es gibt Methoden zum Überprüfen des freien Speicherplatzes im Heap und seiner Größe:
Diese API-Referenz unterstützt Sie bei den verfügbaren Methoden:
Aus einer höheren Perspektive ist das Laden und Zwischenspeichern von Bildern Teil des GreenDroid-Frameworks . Schau es dir an.
Tags und Links android image-caching