Android之com.nostra13.universalimageloader加载图片抛出OutOfMemroyError错误的多种解决办法

com.nostra13.universalimageloader是用来加载图片非常好的框架,但是也有问题,一旦图片过多的话,很容易就会提示OutOfMemroyError错误,也就是内存溢出的问题,在这里有几种解决办法,可以参考下。

一、减少图片占用的内存

对DisplayImageOptions类使用如下的配置。

 new DisplayImageOptions.Builder()
.cacheInMemory(false) //设置图片不缓存于内存中
.cacheOnDisc(true)
.bitmapConfig(Bitmap.Config.RGB_565) //设置图片的质量
.imageScaleType(ImageScaleType.IN_SAMPLE_INT) //设置图片的缩放类型,该方法可以有效减少内存的占用
.build();

二、清除ImageLoader的缓存

1、清除指定图片缓存:

 DiskCacheUtils.removeFromCache(url, ImageLoader.getInstance().getDiskCache());//清除SD卡

 MemoryCacheUtils.removeFromCache(url, ImageLoader.getInstance().getMemoryCache());//清除内存

2、清除ImageLoader全部缓存:

 ImageLoader.getInstance().clearMemoryCache();//清除内存
ImageLoader.getInstance().clearDiskCache();//清除SD卡

三、就是对于抛出的错误做出特定的处理,解决溢出的问题

对图片加载方法添加监听事件,对出现的异常进行特定的处理,其中FailReason为该库中的异常类该类封装了枚举变量FailType,根据不同的异常,可以做出相应的处理和操作。

 imageLoader.loadImage(uri, options, new ImageLoadingListener() {

             @Override
public void onLoadingStarted(String imageUri, View view) {
// TODO Auto-generated method stub } @Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
// TODO Auto-generated method stub
switch (failReason.getType()) {
case IO_ERROR:
//handler.sendEmptyMessage();
break;
case DECODING_ERROR:
break; case NETWORK_DENIED:
break; case OUT_OF_MEMORY://内存溢出
break; case UNKNOWN:
break;
default:
break;
}
} @Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
// TODO Auto-generated method stub } @Override
public void onLoadingCancelled(String imageUri, View view) {
// TODO Auto-generated method stub }
});

在使用ImageLoader或者其他框架加载图片时都应该对内存溢出有所处理,毕竟现在的APP内容也越来越丰富,从而导致APP越来越大,处理好缓存,也可以给用户更好的体验。

上一篇:《UNIX网络编程(第3版)》unp.h等源码文件的编译安装


下一篇:ORCFILE IN HDP 2: BETTER COMPRESSION, BETTER PERFORMANCE