Пока что нет никаких признаков того, что существует какой-либо способ сжать память.
Вот мой обходной путь, который является неоптимальным, но намного лучше, чем прежнее поведение:
Теперь я намеренно придерживаюськ исходному растровому изображению, пока я выполняю свою обработку, а затем recycle () и обнуляем его, и GC (), но не раньше, чем непосредственно перед распределением моего выходного растрового изображения.
Что это делает, это резервный внешний (растровое изображение)) и заставить мое приложение исчерпать кучу Java (во время обработки, перед вызовом recycle ()), которую я могу по крайней мере поймать и обработать, повторив попытку на меньшем изображении.(Раньше все казалось нормальным, пока я не попытался сохранить, но к тому времени было уже слишком поздно и невозможно было восстановить.)
Технически это ограничивает мой максимальный размер изображения меньшим, чем я мог быделать с выделенной памятью (потому что мне нужно зарезервировать пространство в куче и на внешнем устройстве одновременно, когда на самом деле мне никогда не нужно и то и другое вместе), но, по крайней мере, я все еще могу обрабатывать разумный размер изображения.
Чтопроисходило раньше, если бы я освободил и перезапустил растровое изображение на ранней стадии, что позволило высокой отметке на куче Java использовать практически всю мою память, то есть с этого момента я не мог открывать или создавать больше растровых изображений вообще (кроме маленьких размеров миниатюр).
Имо, это серьезная ошибка в способе работы Android с битовой картой, но я считаю, что это исправлено в более новых версиях ОС, так что, надеюсь, я смогу отключить этот обходной путь при условиивыпуск ОС.