Ich habe einen Image-Cache in meiner Anwendung, der mit SoftReferences implementiert wird. Dalvik startet Anwendungen mit relativ kleinen Häufchen und erhöht diese dann im Bedarfsfall. Aber ich möchte meine Heap-Größe von Anfang an größer haben. Das liegt daran, dass, wenn ich bereits einige Bilder im Cache habe und eine Aktivität startet (zum Beispiel) oder eine andere Spitzenspeicheranforderung auftritt, mein Cache gelöscht wird, um Speicher für diesen Spitzenbedarf zuzulassen. Als Ergebnis habe ich nach dem Peak noch 2-3 MB freien Speicherplatz, aber mein Cache ist leer!Android: Wie kann die Heap-Größe zur Laufzeit erhöht werden?
Die Lösung, die ich für dieses Problem sehe, ist die Vorverteilung eines größeren Heaps im Vorhinein, so dass selbst bei einem Spitzenverbrauch von 2-3 MBs noch Platz vorhanden ist, sodass meine SoftReferences nicht gelöscht werden.
Ich fand, dass VMRuntime.getRuntime().setMinimumHeapSize(BIGGER_SIZE)
wäre hilfreich. Insbesondere verwendet Google das in ihren Apps, wie erwähnt here. Die Klasse VMRuntime ist jedoch als veraltet markiert und soll in einer zukünftigen Version aus der öffentlichen API entfernt werden. So ist setMinimumHeapSize
keine dauerhafte Lösung.
Wie also mache ich Dalvik meinen Haufen beim Start zu wachsen?
Derzeit verwende ich eine wirklich geradlinige und käsige Technik, indem ich einfach ein großes Array zuweise und es freigebe. Das lässt Dalvik den Haufen wachsen, wie ich will. Ich bin mir jedoch sicher, dass es eleganter sein muss, das zu tun. Können Sie mir das bitte sagen?
Ich bezweifle, dass Sie einen Weg, dies zu tun, finden die öffentlichen APIs – Falmarri
Google Maps mit verwendet Reflektion und diese api, fand ich diesen Beitrag, während Informationen über den Anruf der Suche :) – sherpya