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越来越大,处理好缓存,也可以给用户更好的体验。

原文地址:https://www.cnblogs.com/LT5505/p/6305702.html