Im Allgemeinen sollten Sie GC nicht explizit mit System.gc () aufrufen. Es gibt sogar die IO-Vorlesung ( http://www.youtube.com/watch?v=_CruQY55HOk ), in der erklärt wird, was das GC-Pausenprotokoll bedeutet und in der sie auch angeben, niemals System.gc () aufzurufen, weil Dalvik es besser weiß als Sie, wenn Sie dies tun.
Andererseits ist, wie in den obigen Antworten erwähnt, der GC-Prozess in Android (wie alles andere auch) manchmal fehlerhaft. Dies bedeutet, dass Dalvik GC-Algorithmen nicht mit Hotspot- oder JRockit-JVMs vergleichbar sind und in einigen Fällen Fehler verursachen können. Eine dieser Gelegenheiten ist das Zuweisen von Bitmap-Objekten. Dies ist schwierig, da es Heap- und Nicht-Heap-Speicher verwendet und eine lose Instanz eines Bitmap-Objekts auf einem Gerät mit eingeschränktem Speicher ausreicht, um eine OutOfMemory-Ausnahme auszulösen. Wenn Sie diese Bitmap nicht mehr benötigen, wird dies von vielen Entwicklern im Allgemeinen empfohlen und von einigen sogar als bewährte Methode angesehen.
Besser ist es, .recycle () für eine Bitmap zu verwenden, da dies das Ziel dieser Methode ist, da der native Speicher der Bitmap als sicher zum Löschen markiert wird. Beachten Sie, dass dies sehr versionierungsabhängig ist, was bedeutet, dass es im Allgemeinen für ältere Android-Versionen (Pre 3.0, glaube ich) erforderlich ist, für spätere jedoch nicht. Es wird auch nicht viel schaden, wenn man es auf neueren Ether-Versionen verwendet (mach das einfach nicht in einer Schleife oder so). Die neue ART-Laufzeit hat sich hier stark verändert, da sie eine spezielle Heap- "Partition" für große Objekte eingeführt hat, aber ich denke, es wird nicht viel schaden, dies mit ART Ether zu tun.
Auch ein sehr wichtiger Hinweis zu System.gc (). Diese Methode ist kein Befehl, auf den Dalvik (oder JVMs) reagieren müssen. Betrachten Sie es eher so, als würden Sie der virtuellen Maschine sagen: "Könnten Sie bitte die Speicherbereinigung durchführen, wenn dies kein Problem ist?".