Wenn Sie eine große Menge an Speicher verwenden (und behalten) müssen , können und sollten Sie diese verwenden android:largeHeap="true"
. Wenn Sie es jedoch verwenden, sollten Sie darauf vorbereitet sein, dass Ihre App aus dem Speicher gelöscht wird, wenn andere Apps im Vordergrund stehen.
Mit "vorbereitet sein" meine ich, dass Sie für diese Wahrscheinlichkeit entwerfen sollten, damit Ihre onStop()
und onResume()
Methoden so effizient wie möglich geschrieben werden, während sichergestellt wird, dass alle relevanten Zustände auf eine Weise gespeichert und wiederhergestellt werden, die dem Benutzer ein nahtloses Erscheinungsbild bietet.
Es gibt drei Methoden, die diese Parameter betreffen: maxMemory()
, getMemoryClass()
, und getLargeMemoryClass()
.
Stellt für die meisten Geräte maxMemory()
einen ähnlichen Wert dar wie getMemoryClass()
standardmäßig, obwohl letzterer in Megabyte ausgedrückt wird, während ersterer in Byte ausgedrückt wird.
Wenn Sie den largeHeap
Parameter verwenden, maxMemory()
wird er auf eine gerätespezifische höhere Ebene erhöht, getMemoryClass()
bleibt jedoch unverändert.
getMemoryClass()
schränkt Ihre Heap-Größe nicht ein, gibt jedoch an, wie viel Heap Sie verwenden sollten , wenn Ihre App innerhalb der Grenzen des jeweiligen Geräts, auf dem Sie ausgeführt werden, komfortabel und kompatibel funktionieren soll .
maxMemory()
Im Gegensatz dazu ist Ihre Heap - Größe, einschränken und so Sie seinen Wert durch zunehmende Verstärkung Zugriff auf zusätzliche Haufen zu tun, und largeHeap
nicht erhöht diesen Wert. Die erhöhte Menge an Heap ist jedoch immer noch begrenzt, und diese Begrenzung ist gerätespezifisch. Dies bedeutet, dass die Menge an Heap, die Ihrer App zur Verfügung steht, abhängig von den Ressourcen des Geräts variiert, auf dem Ihre App ausgeführt wird. Die Verwendung largeHeap
ist also keine Einladung für Ihre App, alle Vorsicht aufzugeben und sich durch das All-you-can-eat-Buffet zu schleichen.
Ihre App kann mithilfe des largeHeap
Parameters durch Aufrufen der Methode genau ermitteln, wie viel Speicher auf einem bestimmten Gerät verfügbar sein würde getLargeMemoryClass()
. Der zurückgegebene Wert wird in Megabyte angegeben.
Dieser frühere Beitrag enthält eine Diskussion des largeHeap
Parameters sowie eine Reihe von Beispielen dafür, welche Heap-Mengen mit und ohne Verwendung auf mehreren spezifischen Android-Geräten verfügbar gemacht werden:
Ermitteln Sie die Größe des Anwendungsheaps in Android
Ich habe keine meiner eigenen Apps mit diesem Parameter auf true bereitgestellt. Ich habe jedoch in einer meiner Apps speicherintensiven Code zum Kompilieren einer Reihe von optimierungsbezogenen Parametern, der nur während der Entwicklung ausgeführt wird. Ich füge den largeHeap
Parameter nur während der Entwicklung hinzu, um Speicherfehler zu vermeiden, während dieser Code ausgeführt wird. Ich entferne jedoch den Parameter (und den Code), bevor ich die App bereitstelle.