Как избежать сбоя CreateBitmap () в Android

#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 в любом случае попытается выполнить сбор мусора.