使用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占用了这么多内存?
答案 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%。