我正在加载大约50张图片。在我的活动中,我有这个配置
DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
.cacheOnDisk(true).cacheInMemory(true)
.imageScaleType(ImageScaleType.EXACTLY)
.resetViewBeforeLoading(true)
.displayer(new FadeInBitmapDisplayer(300))
.build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
.defaultDisplayImageOptions(defaultOptions)
.memoryCache(new WeakMemoryCache())
.diskCacheSize(100 * 1024 * 1024)
.build();
ImageLoader.getInstance().init(config);
在binderdata中
ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.displayImage(uri, holder.iv_img);
加载了一些图片,但有些图片没有加载,我收到OutOfMemory
错误。
答案 0 :(得分:1)
如果您经常使用Universal Image在应用中获得OutOfMemoryError 然后装载机:
- 禁用内存中的缓存。如果仍然出现OOM,那么您的应用程序似乎有内存泄漏。使用MemoryAnalyzer检测它。除此以外 尝试以下步骤(所有这些或几个):
- 减少配置中的线程池大小(.threadPoolSize(...))。建议使用1 - 5.
- 在显示选项中使用.bitmapConfig(Bitmap.Config.RGB_565)。 RGB_565中的位图消耗的内存比ARGB_8888少2倍。
使用.imageScaleType(ImageScaleType.EXACTLY)(您已经使用过这个提示)- 在配置
中使用.diskCacheExtraOptions(480,320,null) 醇>
希望这会有所帮助!!
答案 1 :(得分:0)
1.我建议您查看图像管理库(Facebook) Fresco,与其他图像加载库相比,它非常棒且成熟。
2.Fresco使用3层架构处理所有图像缓存(BITMAP_MEMORY_CACHE
,ENCODED_MEMORY_CACHE
和DISK_CACHE
)。 它还可以减少OOM(内存不足)问题。当视图中的图像离开屏幕时,它会自动回收位图,从而释放内存。
3.Fresco拥有SimpleDraweeView
作为自定义图片视图,支持圆角和圆圈链接并支持动画(.gif
,.webp
)以及普通图片(.jpg
,.png
)。