zoukankan      html  css  js  c++  java
  • 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越来越大,处理好缓存,也可以给用户更好的体验。

  • 相关阅读:
    javascript中的this指向
    面向对象和面向过程、对象、类、实例
    javascript
    实例011:养兔子
    day13匿名函数
    实例010:给人看的时间
    python基础学习day12 生成器与推导式
    实例009:暂停一秒输出
    python基础学习day11函数的进阶
    第一部分:趣味算法入门;第八题:冒泡排序(并与选择排序对比)
  • 原文地址:https://www.cnblogs.com/LT5505/p/6305702.html
Copyright © 2011-2022 走看看