0

我在使用通用图像加载器库时遇到问题。不幸的是,库导致我的应用程序使用大量内存。

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

现在是这样的:

ImageViews 中显示的图像是从 Internet 下载的,每个图像都有大约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 会占用这么多内存?

4

1 回答 1

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

于 2013-08-18T09:19:49.520 回答