Ответ 1
Bitmap.recycle
не требуется, так как сборщик мусора будет в конечном итоге самостоятельно очищать растровые изображения (если нет ссылок). Растровые изображения в Android создаются в собственной памяти, а не в куче виртуальных машин, поэтому фактический объект растрового изображения в куче виртуальных машин очень мал, поскольку он не содержит реальных растровых данных. (РЕДАКТИРОВАТЬ: больше не относится к Android 3. 0+) Реальный размер растрового изображения все равно будет учитываться при использовании кучи для целей GC, и убедитесь, что ваше приложение не использует слишком много памяти.
Однако GC кажется немного капризным, когда дело доходит до битмапов. Если вы просто удалите все жесткие ссылки, иногда (в моем случае) они будут зависать на растровых изображениях на некоторое время дольше, возможно, из-за странного способа размещения/подсчета растровых объектов. Bitmap.recycle, кажется, хорош для того, чтобы заставить GC быстрее собирать этот объект.
В любом случае, вы не утечка памяти, если вы не вызываете Bitmap.recycle
до тех пор, пока вы не держать жесткие ссылки случайно. Вы можете столкнуться с OutOfMemoryErrors
если попытаетесь выделить слишком много растровых изображений одновременно или слишком большие растровые изображения без вызова recycle
.
РЕДАКТИРОВАТЬ: важно отметить, что начиная с Android 3.0, растровые изображения больше не выделяются в собственной памяти. Они размещаются в куче виртуальной машины, как и любой другой объект Java. Однако то, что я сказал о том, что нет необходимости вызывать recycle, все еще применимо.