Ogólnie rzecz biorąc, nie powinieneś wywoływać GC jawnie za pomocą System.gc (). Jest nawet wykład IO ( http://www.youtube.com/watch?v=_CruQY55HOk ), w którym wyjaśniają, co oznacza GC pauzy log, iw którym również stwierdzają, że nigdy nie wywołują System.gc (), ponieważ Dalvik wie lepiej niż ty, kiedy to zrobić.
Z drugiej strony, jak wspomniano w powyższych odpowiedziach, już proces GC w systemie Android (jak wszystko inne) jest czasami błędny. Oznacza to, że algorytmy Dalvik GC nie są na równi z JVM Hotspot lub JRockit i mogą czasami powodować błędy. Jedną z takich sytuacji jest przydzielanie obiektów bitmapowych. Jest to trudne, ponieważ używa pamięci Heap i Non Heap oraz ponieważ jedno luźne wystąpienie obiektu bitmapowego na urządzeniu z ograniczoną pamięcią wystarczy, aby uzyskać wyjątek OutOfMemory. Dlatego nazywanie go po tym, jak nie potrzebujesz już tej mapy bitowej, jest ogólnie sugerowane przez wielu programistów, a niektórzy nawet uważają je za dobrą praktykę.
Lepszą praktyką jest użycie .recycle () na mapie bitowej, ponieważ jest to cel tej metody, ponieważ oznacza ona pamięć natywną mapy bitowej jako bezpieczną do usunięcia. Należy pamiętać, że jest to bardzo zależne od wersji, co oznacza, że będzie generalnie wymagane na starszych wersjach Androida (myślę, że Pre 3.0), ale nie będzie wymagane w późniejszych wersjach. Również nie zaszkodzi używanie go na nowszych wersjach ether (po prostu nie rób tego w pętli lub coś w tym stylu). Nowe środowisko wykonawcze ART bardzo się tutaj zmieniło, ponieważ wprowadzono specjalną „partycję” sterty dla dużych obiektów, ale myślę, że nie zaszkodzi to zrobić z ART ether.
Również jedna bardzo ważna uwaga na temat System.gc (). Ta metoda nie jest poleceniem, na które Dalvik (lub maszyny JVM) są zobowiązani odpowiedzieć. Potraktuj to bardziej tak, jakbyś powiedział do maszyny wirtualnej „Czy mógłbyś wykonać czyszczenie pamięci, jeśli nie jest to kłopotliwe”.