Я прочитал несколько сообщений, таких как this об использовании фона фона.Android по-прежнему использует избыточную память при загрузке фонового изображения
- мое фоновое изображение - 2048x1365 59KB JPEG; его несжатое растровое изображение 11MB
- фон на представлении для конкретного устройства будет 480x605, поэтому использование было бы 1.1MB (480x605x4)
- моего приложение изначально использует 12MB без фонового изображения
- размещения изображения в drawable- nodpi/и установить его в формате XML, чтобы использовать память до 23 МБ; так что точно base + BMP size
- Использование BitmapFactory для декодирования изображения (перемещено в raw /), согласно результатам консультаций, в 33 МБ использования памяти. (См коды ниже.)
коды, чтобы установить фон
View view = findViewById(R.id.main_content);
Rect rect = new Rect();
view.getLocalVisibleRect(rect);
BitmapFactory.Options options = new BitmapFactory.Options();
options.outHeight = rect.height();
options.outWidth = rect.width();
options.inScaled = false;
Bitmap backgroundBitmap = BitmapFactory.decodeResource(getResources(), backgroundId, options);
view.setBackgroundDrawable(new BitmapDrawable(getResources(), backgroundBitmap));
Что идет не так? Что еще я могу сделать, чтобы уменьшить использование памяти?
Рассчитайте правильную 'inSampleSize'. Прямо сейчас ваш код «BitmapFactory» загружается во всем изображении с полным разрешением. Как вы заметили, вам это не нужно. 'inSampleSize' в' BitmapFactory.Options' сообщает 'BitmapFactory', чтобы дать вам масштабированную растровую карту, которая ближе к желаемому размеру. – CommonsWare
@CommonsВсе это работает. Теперь динамическая загрузка изображения потребляет только 1,1 Мбайт дополнительной памяти, как и ожидалось! Если вы опубликуете его в качестве ответа, я его проголосую. –