android通用图片加载程序内存不足

时间:2016-03-31 03:14:02

标签: android universal-image-loader

我正在加载大约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错误。

2 个答案:

答案 0 :(得分:1)

Useful Info

查看此提示
  

如果您经常使用Universal Image在应用中获得OutOfMemoryError   然后装载机:

     
      
  1. 禁用内存中的缓存。如果仍然出现OOM,那么您的应用程序似乎有内存泄漏。使用MemoryAnalyzer检测它。除此以外   尝试以下步骤(所有这些或几个):
  2.   
  3. 减少配置中的线程池大小(.threadPoolSize(...))。建议使用1 - 5.
  4.   
  5. 在显示选项中使用.bitmapConfig(Bitmap.Config.RGB_565)。 RGB_565中的位图消耗的内存比ARGB_8888少2倍。
  6.   
  7. 使用.imageScaleType(ImageScaleType.EXACTLY)(您已经使用过这个提示)
  8.   
  9. 在配置
  10. 中使用.diskCacheExtraOptions(480,320,null)   

希望这会有所帮助!!

答案 1 :(得分:0)

1.我建议您查看图像管理库(Facebook) Fresco,与其他图像加载库相比,它非常棒且成熟。

2.Fresco使用3层架构处理所有图像缓存(BITMAP_MEMORY_CACHEENCODED_MEMORY_CACHEDISK_CACHE)。 它还可以减少OOM(内存不足)问题。当视图中的图像离开屏幕时,它会自动回收位图,从而释放内存。

3.Fresco拥有SimpleDraweeView作为自定义图片视图,支持圆角和圆圈链接并支持动画(.gif.webp)以及普通图片(.jpg.png)。