Wie können Sie feststellen, wie weit Ihre Aktivität vom Erreichen der Speichergrenze entfernt ist?

Ich schreibe eine Grafikdesign-Anwendung für Android, mit der der Benutzer einem Dokument mehrere Bilder hinzufügen kann, wobei jedes Bild als Bitmap-Objekt gespeichert wird. Jede Bitmap hat eine Größe von ungefähr 800 x 400 Pixel und verwendet das ARGB8888-Pixelformat (d. H. Jeweils ~ 1,5 MB).

Mir ist bewusst, dass die meisten Android-Geräte der ersten Generation ein Heap-Limit von 16 MB haben und dieses Limit für neuere Telefone bei 24 MB und höher liegt. Mir ist auch bewusst, dass der Bitmap-Speicher extern zugewiesen wird, aber ich bin verwirrt und weiß, welche Auswirkungen dies hat.

Meine Frage ist: Wie kann ich zur Laufzeit feststellen, wann das Hinzufügen einer neuen Bitmap dazu führt, dass ich zu nahe am Speicherlimit bin?

Bevor jemand vorschlägt, "nicht so viel Speicher zu verwenden", weiß ich, dass ich die Möglichkeit habe, die Anzahl der vom Benutzer erstellbaren Bitmaps so zu begrenzen, dass ich weiß, dass diese Beschränkung für die einfachsten Android-Telefone sicher ist. Ich möchte jedoch, dass Telefone mit einer größeren Speicherbeschränkung mehr Bitmaps und / oder größere Bitmaps unterstützen.

Ich weiß, dass beim Zuweisen von Bitmaps nach OutOfMemory-Ausnahmen gesucht wird. Es wird jedoch Situationen geben, in denen nur noch genügend Speicher verfügbar ist, um eine weitere Bitmap zuzuweisen. Ab diesem Zeitpunkt ist die gesamte Anwendung instabil, da selbst das Zuweisen kleiner Elemente wie Zeichenfolgen zu einer OutOfMemory-Ausnahme führen kann. Das möchte ich vermeiden.

Ich bin mir nicht sicher, wie ich "zu nahe am Speicherlimit" definieren soll, aber ich vermute, dass "Bitmaps nicht mehr als die Hälfte des verfügbaren Speichers zuweisen" einwandfrei funktioniert, da meine anderen Datenstrukturen, die ich im Speicher speichere sind im Vergleich klein.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage