Android开发经验谈Android开发技术干货

android 图片框架之ImageLoader

2019-06-05  本文已影响15人  静染星辰
@Override
    protected void onDestroy() {
        // 回收该页面缓存在内存中的图片
        imageLoader.clearMemoryCache();
        super.onDestroy();
    }

··此外,由于ImageLoader对图片是软引用的形式,所以内存中的图片会在内存不足的时候被系统回收(内存足够的时候不会对其进行垃圾回收)。

1,导入项目:

compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'

2,初始化框架:

重写application的oncreate方法

 DisplayImageOptions options = new DisplayImageOptions.Builder()
                .cacheInMemory(false) //设置下载的图片是否缓存在内存中
                .cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中
                .showImageOnLoading(R.drawable.zhanwei_shape)
                .showImageOnFail(R.drawable.zhanwei_shape)
                .bitmapConfig(Bitmap.Config.RGB_565)
                .considerExifParams(true)//是否考虑JPEG图像EXIF参数(旋转,翻转)
                .resetViewBeforeLoading(true)// 设置图片在下载前是否重置,复位
                .build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(myApplation)
                .memoryCacheExtraOptions(480, 800) // max width, max height,即保存的每个缓存文件的最大长宽
                .threadPoolSize(3) //线程池内加载的数量
                .threadPriority(Thread.NORM_PRIORITY - 2)
                .denyCacheImageMultipleSizesInMemory()
                .diskCacheFileNameGenerator(new Md5FileNameGenerator()) //将保存的时候的URI名称用MD5 加密
                .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024)) // You can pass your own memory cache implementation/你可以通过自己的内存缓存实现
                .memoryCacheSize(2 * 1024 * 1024) // 内存缓存的最大值
                .diskCacheSize(50 * 1024 * 1024)  // 50 Mb sd卡(本地)缓存的最大值
                .tasksProcessingOrder(QueueProcessingType.LIFO)
                .defaultDisplayImageOptions(options)// 由原先的discCache -> diskCache
                .diskCache(new UnlimitedDiskCache(new File(Constants.FILEPATH)))//自定义缓存路径
                .imageDownloader(new BaseImageDownloader(myApplation, 5 * 1000, 30 * 1000)) // connectTimeout (5 s), readTimeout (30 s)超时时间
                .writeDebugLogs() // Remove for release app
                .build();
ImageLoader.getInstance().init(config);//全局初始化此配置

3,使用:

DisplayImageOptions options = new DisplayImageOptions.Builder()
            .cacheInMemory(true) //设置下载的图片是否缓存在内存中
            .cacheOnDisc(true)//设置下载的图片是否缓存在SD卡中
            .showImageOnLoading(R.drawable.zhanwei_avater)
            .showImageOnFail(R.drawable.zhanwei_avater)
            .bitmapConfig(Bitmap.Config.RGB_565)
            .considerExifParams(false)//是否考虑JPEG图像EXIF参数(旋转,翻转)
            .resetViewBeforeLoading(false)// 设置图片在下载前是否重置,复位
            .build();
ImageLoader.getInstance().displayImage(imageUri , imageview, options);
imageUri 的几种图片来源:
// 网络图片
String imageUri = "http://pic2.16pic.com/00/15/80/16pic_1580359_b.jpg";   
//SD卡图片
String imageUri = "file:///mnt/sdcard/zhanwei.png"; 
// 媒体文件夹 
String imageUri = "content://media/external/audio/albumart/6";  
// assets 
String imageUri = "assets://zhanwei.png";
//  drawable文件 
String imageUri = "drawable://" + R.drawable.zhanwei;  

--------END------

我是静染星辰,私人微信:azxy986753

欢迎添加微信,互相学习,互相进步!

上一篇下一篇

猜你喜欢

热点阅读