UniversalImageLoader的内存消耗量很大

时间:2013-08-15 21:49:28

标签: android memory android-scrollview universal-image-loader outofrangeexception

使用Universal Image Loader Library时遇到问题。 遗憾的是,该库会导致我的应用程序使用大量内存。

我有一个ScrollView(有很多原因,我使用ScrollView而不是ListView,其中大多数都与自定义插入和项目选择动画有关)持有 20个自定义视图 。 每个自定义视图都包含一些TextView和ImageView。

现在就是这样:

ImageView中显示的图像是从互联网上下载的,每个图像都有 100-150kb(尺寸640 x 320)。如果我使用UniversalImageLoader下载图像,我的应用程序会因OutOfMemoryException而崩溃,因为它使用 80Mb 的内存。

如果我没有下载图像,只是在每个自定义视图中输入大小为 1200kb(尺寸为1920 x 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占用了这么多内存?

1 个答案:

答案 0 :(得分:0)

对于那些有同样问题的其他人:

我设法通过遵循以下准则来最小化我的内存使用量并摆脱OutOfMemoryException

  

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

对我来说最重要的部分是将ThreadPoolSize降低到2. 设置后我感觉不到任何性能变化。

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%。