И я применяю это к более чем 10 ImageView, которые создаются один за другим. Всякий раз, когда я создаю новый ImageView, я хочу переработать объект 'bm' из первого, вызывая этот код там, заставляет мою кучу расти все больше и больше, а затем выбрасывать OutOfMemoryError, поэтому я делаю:
bm.recycle()
сразу после того, как я установил растровое изображение (bm) в объект ImageView. Это вызывает исключение, что холст ImageView хочет нарисовать переработанное растровое изображение.
Как можно переработать растровое изображение, которое уже было помещено в качестве изображения в ImageView?
Спасибо
Переведено автоматически
Ответ 1
В вашем методе onDestroy вы могли бы попробовать что-то вроде этого:
Если вы установите один и тот же растровый объект на всех своих ImageViewустройствах, он не должен выдавать OutOfMemoryError. В принципе, это должно сработать:
Если это не работает, это просто означает, что ваше растровое изображение слишком большое (6000x2000 пикселей - это около 12 мегабайт, если я правильно рассчитал). Вы можете либо:
уменьшите размер вашего растрового изображения
сократите использование других материалов, которые занимают много памяти
Ответ 3
Ответ Devconsole отличный, но вы также можете сохранить все растровые объекты в list как член вашего класса, а затем перерабатывать их в цикле, когда будет вызван метод activity onDestroy() (или какой-либо другой метод жизненного цикла выпуска компонента, где вы используете bitmap).
Ответ 4
Не создавайте изображения большего размера, чем вам нужно, за один раз. Ограничения кучи предназначены для того, чтобы вы не зависали и полностью не занимали ограниченную память устройства.
Если вам нужно больше деталей, потому что вы планируете увеличить масштаб, повторно визуализируйте эту часть изображения с большей детализацией во время масштабирования, исключая части, которые вы не просматриваете.