#android #memory #bitmap
#Android #память #растровое изображение
Вопрос:
Я использую createBitmap()
в нескольких местах. Иногда этот api выдает OutOfMemoryError()
исключение. Как избежать этого исключения?
Я использую, как показано ниже,
createBitamp(width, height, Config.ARGB_8888);
width = width
экрана
height = height
экрана
Любая помощь будет оценена.
Комментарии:
1. прочитайте это сообщение в блоге codingaffairs.blogspot.com/2016/07 /…
Ответ №1:
Я опубликовал некоторую информацию о том, как обрабатываются растровые изображения, в следующем тикете проблемы с Android. Это может быть полезно для вас: http://code.google.com/p/android/issues/detail?id=8488#c80
Ответ №2:
Многие сталкиваются с этой проблемой. У вас есть три способа решить проблему:
- Увеличьте доступную память: остановите службы или замените устройство на более новое
- Уменьшите использование памяти: оптимизируйте свой код
- [ОБНОВЛЕНИЕ] Освободите неиспользуемую память растрового изображения: вызовите recycle() .
- [ОБНОВЛЕНИЕ] Не используйте GarbageCollector 🙂
Обычно при проблемах с растровым изображением помогает сборщик мусора.
Ответ Джастина Брайтфеллера ссылается на более подробное объяснение внутренней работы растрового изображения. Сообщение, которое нужно убрать, заключается в том, что память, выделенная для данных bitmap (в собственном методе CreateBitmap), обрабатывается несколько раздельно и не освобождается напрямую GarbageCollector, когда Bitmap становится доступным для сбора мусора. Реальное решение — переработать () ваши растровые изображения, когда они не используются. Это по-прежнему сохранит (небольшую) память, выделенную для объекта Bitmap, но пометит (большую) память, выделенную для сбора мусора данных bitmap. Следовательно, GarbageCollector, в свою очередь, освободит оба, но вам не нужно вызывать его вручную, прежде чем произойдет OutOfMemory, JVM в любом случае попытается выполнить сбор мусора.