Вообще говоря, вы не должны явно вызывать GC с помощью System.gc (). Есть даже лекция по вводу-выводу ( http://www.youtube.com/watch?v=_CruQY55HOk ), где они объясняют, что означает журнал пауз сборщика мусора и в котором также говорится, что никогда не следует вызывать System.gc (), потому что Dalvik знает лучше чем вы, когда это сделать.
С другой стороны, как упоминалось в ответах выше, уже процесс GC в Android (как и все остальное) иногда бывает ошибочным. Это означает, что алгоритмы Dalvik GC не соответствуют JVM Hotspot или JRockit и в некоторых случаях могут работать неправильно. Один из таких случаев - при выделении растровых объектов. Это сложно, потому что он использует память кучи и не кучу, и потому что одного свободного экземпляра объекта растрового изображения на устройстве с ограничением памяти достаточно, чтобы вызвать исключение OutOfMemory. Поэтому вызов его после того, как вам больше не нужно это растровое изображение, обычно предлагают многие разработчики, а некоторые даже считают хорошей практикой.
Лучше использовать .recycle () для растрового изображения, поскольку для этого и создан этот метод, поскольку он отмечает внутреннюю память растрового изображения как безопасную для удаления. Имейте в виду, что это очень зависит от версии, что означает, что это обычно требуется в более старых версиях Android (я думаю, до 3.0), но не потребуется в более поздних версиях. Также не повредит его использование в более новых версиях эфира (только не делайте этого в цикле или что-то в этом роде). Новая среда исполнения ART здесь сильно изменилась, потому что они представили специальный «раздел» кучи для больших объектов, но я думаю, что это не повредит, если сделать это с помощью ART ether.
Также одно очень важное замечание о System.gc (). Этот метод не является командой, на которую Dalvik (или JVM) обязан отвечать. Считайте, что это больше похоже на обращение к виртуальной машине: «Не могли бы вы сделать сборку мусора, если это не мешает».