Android之com.nostra13.universalimageloader加载图片抛出OutOfMemroyError错误的多种解决办法
com.nostra13.universalimageloader是用来加载图片非常好的框架,但是也有问题,一旦图片过多的话,很容易就会提示OutOfMemroyError错误,也就是内存溢出的问题,在这里有几种解决办法,可以参考下。
一、减少图片占用的内存
对DisplayImageOptions类使用如下的配置。
1 new DisplayImageOptions.Builder() 2 .cacheInMemory(false) //设置图片不缓存于内存中 3 .cacheOnDisc(true) 4 .bitmapConfig(Bitmap.Config.RGB_565) //设置图片的质量 5 .imageScaleType(ImageScaleType.IN_SAMPLE_INT) //设置图片的缩放类型,该方法可以有效减少内存的占用 6 .build();
二、清除ImageLoader的缓存
1、清除指定图片缓存:
1 DiskCacheUtils.removeFromCache(url, ImageLoader.getInstance().getDiskCache());//清除SD卡 2 3 MemoryCacheUtils.removeFromCache(url, ImageLoader.getInstance().getMemoryCache());//清除内存
2、清除ImageLoader全部缓存:
1 ImageLoader.getInstance().clearMemoryCache();//清除内存 2 ImageLoader.getInstance().clearDiskCache();//清除SD卡
三、就是对于抛出的错误做出特定的处理,解决溢出的问题
对图片加载方法添加监听事件,对出现的异常进行特定的处理,其中FailReason为该库中的异常类该类封装了枚举变量FailType,根据不同的异常,可以做出相应的处理和操作。
1 imageLoader.loadImage(uri, options, new ImageLoadingListener() { 2 3 @Override 4 public void onLoadingStarted(String imageUri, View view) { 5 // TODO Auto-generated method stub 6 7 } 8 9 @Override 10 public void onLoadingFailed(String imageUri, View view, FailReason failReason) { 11 // TODO Auto-generated method stub 12 switch (failReason.getType()) { 13 case IO_ERROR: 14 //handler.sendEmptyMessage(); 15 break; 16 case DECODING_ERROR: 17 break; 18 19 case NETWORK_DENIED: 20 break; 21 22 case OUT_OF_MEMORY://内存溢出 23 break; 24 25 case UNKNOWN: 26 break; 27 default: 28 break; 29 } 30 } 31 32 @Override 33 public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { 34 // TODO Auto-generated method stub 35 36 } 37 38 @Override 39 public void onLoadingCancelled(String imageUri, View view) { 40 // TODO Auto-generated method stub 41 42 } 43 });
在使用ImageLoader或者其他框架加载图片时都应该对内存溢出有所处理,毕竟现在的APP内容也越来越丰富,从而导致APP越来越大,处理好缓存,也可以给用户更好的体验。