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

最新文章

  1. 代码的坏味道(19)——狎昵关系(Inappropriate Intimacy)
  2. jquery.zclip轻量级复制失效问题
  3. CoreData数据库浅析
  4. CSS特异性(CSS Specificity)的细节之CSS样式权重的计算与理解(CSS样式覆盖规则)
  5. 在Altium_Designer_PCB_中插入图片的方法
  6. IOS添加手势识别
  7. 送给和我一样曾经浮躁过的PHP程序猿
  8. c# 各种排序算法+找第二大的数+句子单词反转
  9. C++中的const关键字的用法
  10. TC Asia Competition
  11. 李洪强漫谈iOS开发[C语言-034]-程序的结构
  12. Android 安卓实现页面相互跳转并相互传递参数
  13. JavaSE教程-04Java中循环语句for,while,do···while-练习2
  14. 线上Java程序导致服务器CPU占用率过高的问题排除过程
  15. Spring Boot + Jersey发生FileNotFoundException (No such file or directory)
  16. noi2018还没想好记
  17. Linux下编译器的安装
  18. webpack学习笔记--压缩代码
  19. 《Head First设计模式》批注系列(一)——观察者设计模式
  20. Linux之添加交换分区

热门文章

  1. jsp c:forEach用法
  2. Android系统属性SystemProperties分析
  3. kafka 集群部署 多机多broker模式
  4. CentOS 6.4 利用 Awstats 7.2 分析 Nginx 日志
  5. 彻底领悟javascript中的this
  6. CABasicAnimation 基本动画
  7. iOS 的三种自建证书方法https请求相关配置
  8. ASIHTTPRequest异步请求
  9. PHPCMS快速建站系列之自定义分页函数
  10. vuejs 父组件向子组件传递($broadcast()的用法)