Ich erstelle dieses Android-Spiel in Java. Ich habe ziemlich viele Bilder, muss sie aber nicht alle auf einmal verwenden, daher habe ich eine Resource Manager-Klasse erstellt, die sich um die verwendeten Bitmaps kümmert. Allerdings habe ich es ziemlich langsam gefunden, die Bitmap aus dem Speicher zu löschen. Ich mache derzeit so etwas:
%Vor%Erstens, gibt es eine Möglichkeit, die Bitmaps schneller aus dem Speicher zu entladen oder ist es möglich, irgendwie zu überprüfen, ob sie tatsächlich gelöscht sind, so kann ich den Ladebildschirm davon abhängig machen?
Es gibt keine Garantie, dass der Garbage Collector tatsächlich ausgeführt wird, wenn wir versuchen, System.gc () als gc () erwartet bestimmte Voraussetzungen wie Ressourcenhunger. Es ist also offensichtlich, dass der Aufruf von gc () nur kritische CPU-Zyklen verschwendet. Als Entwickler können wir unnötige Objekte für gc collectable machen, indem wir die Referenzen annullieren.
Es gibt einige Optimierungstechniken, die beim Erstellen eines Spielsystems (Spiels) hilfreich sein können.
Verwende Textur. Hier ist ein Beispiel .
Verwenden Sie Sprite und SpriteSheets (es gibt weniger Systemaufwand als das Laden einzelner Bitmaps). Viele Open-Source-Spiele-Engines sind da, die dies verwenden. Wenn Sie sie nicht verwenden möchten, erhalten Sie eine Idee, wie Sie diese Quellen neu erstellen können.
Verwenden Sie diese Standard-Android-Dokumentation, um Loading Large Bitmaps Efficiently und Caching Bitmaps zur besseren Verwendung von Bitmap. Die Idee ist, wenn Benutzer Gerät ist nicht effizient genug, um die Menge der Verarbeitung zu behandeln und / oder der Speicher ist weniger für Ihr Spiel können Sie immer die Bitmap (Kompromiss mit Qualität für eine bessere Reaktion) zu verkleinern.
Testen Sie Ihre App immer auf Probleme mit Speicherverlust. Hier ist ein nettes Post , das Ihnen helfen wird.
Keep InMemory (nicht einmal verwendete Elemente freigeben), die mehrmals innerhalb des Spiels in derselben Szene verwendet werden. Der Grund ist, dass es viel Zeit braucht, um Bilder in den Speicher zu laden.
Hoffe, das wird dir helfen.
Wie SylvainL sagte, sammeln System.gc und Freunde den vollen Müll und können ziemlich langsam sein. Der Java-Rechner führt den GC periodisch aus, und die Periode wird fein abgestimmt, je nachdem wie viel freier Speicher zu einem bestimmten Zeitpunkt verfügbar ist.
Die beste Wahl für mich ist die Verwendung einer Art Bitmap-Pooling: Vordefinierte Bitmap-Instanzen, die Sie aus dem Pool abrufen und an diesen freigeben können, und Verwalten von Buffer-Instanzen in einem Cache mithilfe von LRU-Richtlinien.
Mit der richtigen Feineinstellung können Sie beim Erstellen und Löschen von Bitmap-Instanzen keine Kosten verursachen, da sie gepoolt werden. Pufferinstanzen, die Bitmap-Daten enthalten, werden je nach Verwendung dynamisch aus dem Speicher geladen und entladen.