Я думаю, что проблема заключается в следующем: в версиях Android, предшествующих Honeycomb, фактические необработанные растровые данные хранятся не в памяти виртуальной машины, а в собственной памяти. Эта собственная память освобождается , когда соответствующий объект java Bitmap
имеет значение GC'd.
Однако , когда у вас заканчивается собственная память, dalvik GC не запускается, поэтому возможно, что ваше приложение использует очень мало памяти java, поэтому dalvik GC никогда не вызывается, тем не менее он использует тонны собственной памяти для растровых изображений, что в конечном итоге вызывает ошибку OOM.
По крайней мере, это мое предположение. К счастью, в Honeycomb и более поздних версиях все растровые данные хранятся на виртуальной машине, поэтому вам вообще не нужно использовать recycle()
. Но для миллионов пользователей 2.3 (фрагментация сотрясает кулак ), вы должны использовать recycle()
везде, где это возможно (огромные хлопоты). Или же вы можете вместо этого вызвать GC.