0

У меня проблема с использованием универсальной библиотеки загрузчика изображений. К сожалению, библиотека вызывает огромное использование памяти моего приложения.Огромное потребление памяти UniversalImageLoader

У меня есть Scrollview (есть много причин, почему я использую Scrollview вместо ListView, большинство из них имеет отношение к пользовательской вставке и выбор элемента анимации) выдерживания около 20 пользовательских просмотров. Каждый из этих пользовательских представлений состоит из некоторых TextViews, а также ImageView.

А теперь вот незадача:

Образы экран отображается в ImageViews загружаются из Интернета, и все они имеют около 100-150kb (размер 640 х 320) каждый. Если я загружаю изображения с помощью UniversalImageLoader, мое приложение вылетает с OutOfMemoryException, потому что оно использует около 80Mb памяти.

Если я не загружать изображения, а просто поставить в Hard-Coded изображения с размером 1200kb (размер 1920 х 1080) на настраиваемое представление, мое приложение только потребляет около 40Mb памяти.

Что я делаю неправильно с помощью UniversalImageLoader при загрузке в десять раз меньше изображений Заставляет мое приложение использовать вдвое больше памяти?

Я отключил все механизмы кеширования, но проблема все еще сохраняется.

Вот моя установка UniversalImageLoader:

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(c) 
     .build(); 

ImageLoader.getInstance().init(config); 

DisplayImageOptions options = new DisplayImageOptions.Builder() 
     .showStubImage(R.drawable.loading) 
     .showImageForEmptyUri(R.drawable.loading) 
     .showImageOnFail(R.drawable.loading) 
     .cacheInMemory(false) 
     .cacheOnDisc(false) 
     .imageScaleType(ImageScaleType.IN_SAMPLE_INT) // default 
     .build(); 

И в коде, я называю это так:

ImageLoader im = ImageLoader.getInstance(); 
im.displayImage("myurl", myimageview, options); 

Что я делаю неправильно? Почему UniversalImageLoader использует столько памяти?

+0

Размер файла часто не совпадает с размером в памяти при обращении к изображениям. Я предполагаю, что ваши номера 100-150 КБ относятся к размеру файла (сжатый). – kabuko

+0

Да, когда я загружаю файлы, например, через мой браузер на компьютере, они все между 100 и 150 КБ. Поэтому я не понимаю, почему изображения 100-150 КБ используют больше памяти, чем изображения 1200 КБ.Он должен иметь какое-то отношение к ImageLoader и к кешированию. –

+0

Опять же, сжатие ... Размер пикселей здесь имеет значение. – kabuko

ответ

0

Для всех других людей там, имеющие одни и те же вопросы:

мне удалось свести к минимуму моего использованию памяти и избавиться от OutOfMemoryException следуя эти рекомендации:

https://github.com/nostra13/Android-Universal-Image-Loader#useful-info

Самой важной частью для меня было сокращение ThreadPoolSize до 2. Я не мог t почувствуйте изменения производительности после их установки.

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(c) 
.threadPoolSize(2) 
.build(); 

DisplayImageOptions options = new DisplayImageOptions.Builder() 

// other options 

.bitmapConfig(Bitmap.Config.RGB_565) 
.imageScaleType(ImageScaleType.EXACTLY) 

// other options 
.build(); 

Это уменьшило мои приложения общее потребление памяти примерно на 35%.

Смежные вопросы