BitmapFactory OOM, сводящий меня с ума

Я делал большой поиск, и я знаю, что много других людей испытывает те же проблемы памяти OOM с BitmapFactory. Мое приложение только показывает общую память, доступную из использования 4 МБ Runtime.getRuntime ().totalMemory(). Если предел составляет 16 МБ, то, почему общая память не растет для создания места для битового массива? Вместо этого это бросает ошибку.

Я также не понимаю это, если у меня есть 1.6 МБ свободной памяти согласно Runtime.getRuntime().freeMemory() почему я получаю ошибку при высказывании, что "VM не позволит нам выделить 614 400 байтов"? Кажется мне, у меня есть много доступной памяти.

Мое приложение является законченным за исключением этой проблемы, которая уходит, когда я перезагружаю телефон так, чтобы мое приложение было единственной вещью, работающей. Я использую HTC Hero для устройства, тестирующего (Android 1.5).

В этой точке я думаю, что единственный путь вокруг этого состоит в том, чтобы так или иначе избегать использования BitmapFactory.

У кого-либо есть какие-либо идеи об этом или объяснении относительно того, почему VM не выделит 614 КБ, когда будет 1.6 МБ свободной памяти?

30
задан Swati Garg 15 October 2018 в 11:35
поделиться

1 ответ

1.6 Мб памяти кажется много, но может быть так, что память настолько сильно фрагментирована, что не может выделить такой большой блок памяти за один ход (все же это звучит очень странно).

Одна из распространенных причин использования OOM при использовании ресурсов образов - это распаковка JPG, PNG, GIF изображений с действительно высоким разрешением. Вы должны помнить, что все эти форматы довольно хорошо сжаты и занимают очень мало места, но как только вы загружаете изображения в телефон, память, которую они собираются использовать, это что-то вроде ширина * высота * 4 байта . Также, когда запускается декомпрессия, необходимо загрузить несколько других вспомогательных структур данных для этапа декодирования.

.
2
ответ дан 27 November 2019 в 23:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: