universal-image-loader的使用及介绍

本文详细介绍Android-Universal-Image-Loader的使用方法,包括依赖配置、权限申请、参数配置、图片显示配置等,并提供示例代码。同时,还介绍了内存缓存、磁盘缓存的配置方法以及图片加载的各种接口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:

Android Universal Image Loader 源码分析

Android-Universal-Image-Loader的GitHub地址

ImageLoader中相关配置详解

使用:

1、依赖:

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

2、权限

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

3、Application中配置ImageLoaderConfiguration参数

//配置一:默认
ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(this));


//配置二:自定义
File cacheDir = StorageUtils.getCacheDirectory(context);  //缓存文件夹路径
//File cacheDir = StorageUtils.getCacheDirectory(getApplicationContext());//默认
//File cacheDir = StorageUtils.getOwnCacheDirectory(this, "imageloader/Cache");

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
        .memoryCacheExtraOptions(480, 800) 
        // default = device screen dimensions 内存缓存文件的最大长宽
        .diskCacheExtraOptions(480, 800, null) 
        // 本地缓存的详细信息(缓存的最大长宽),最好不要设置这个 
        .taskExecutor(...)
        .taskExecutorForCachedImages(...)
        .threadPoolSize(3) // default  线程池内加载的数量
        .threadPriority(Thread.NORM_PRIORITY - 2) 
        // default 设置当前线程的优先级
        .tasksProcessingOrder(QueueProcessingType.FIFO) 
        // default FIFO,线程池的线程队列类型。目前只有 FIFO, LIFO 两种可供选择。
        .denyCacheImageMultipleSizesInMemory()
        .memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //可以通过自己的内存缓存实现
        .memoryCacheSize(2 * 1024 * 1024)  // 内存缓存的最大值
        .memoryCacheSizePercentage(13) // default
        .diskCache(new UnlimitedDiscCache(cacheDir)) 
        // default 可以自定义缓存路径  

        .diskCacheSize(50 * 1024 * 1024) // 50 Mb sd卡(本地)缓存的最大值
        .diskCacheFileCount(100)  // 可以缓存的文件数量 
        // default为使用HASHCODE对UIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密
        .diskCacheFileNameGenerator(new HashCodeFileNameGenerator()) 
        .imageDownloader(new BaseImageDownloader(context)) // default
        .imageDecoder(new BaseImageDecoder()) // default
        .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default
         .discCache(new LimitedAgeDiscCache(cacheDir, 7 * 24 * 60 * 60))
         // 自定义缓存路径,7天后自动清除缓存
        .writeDebugLogs() // 打印debug log
        .build(); //开始构建 

ImageLoader imageLoader = ImageLoader.getInstance();
if (!imageLoader.isInited()) {//避免多次配置
    imageLoader.init(config);
}

4、要显示图片的地方配置DisplayImageOptions参数

DisplayImageOptions options = new DisplayImageOptions.Builder()
                //加载图片时的图片
                .showImageOnLoading(R.drawable.ic_stub)            
                //没有图片资源时的默认图片
                .showImageForEmptyUri(R.drawable.ic_empty)         
                //加载失败时的图片
                .showImageOnFail(R.drawable.ic_error)              
                //启用内存缓存,默认false
                .cacheInMemory(true)                               
                //启用外存缓存,默认false
                .cacheOnDisk(true)                                 
                //是否考虑JPEG图像EXIF参数(旋转,翻转)启用EXIF和JPEG图像格式,默认false,// 会识别图片的方向信息
                .considerExifParams(true)                          
                //设置显示风格这里是圆角矩形,默认SimpleBitmapDisplayer
                //设置图片的显示方式:
                //        RoundedBitmapDisplayer(int roundPixels)设置圆角图片
                //        FakeBitmapDisplayer()这个类什么都没做
                //        FadeInBitmapDisplayer(int durationMillis)设置图片渐显的时间
                //        SimpleBitmapDisplayer()正常显示一张图片
                .displayer(new RoundedBitmapDisplayer(30))         
                //默认是ARGB_8888, 使用RGB_565会比使用ARGB_8888少消耗2倍的内存
                .bitmapConfig(Bitmap.Config.RGB_565)                
                // default false //设置图片在下载前是否重置,复位,//在ImageView显示图片之前先清空已有的图片内容
                .resetViewBeforeLoading(false)  
                .delayBeforeLoading(1000)//下载前的延迟时间
                //设置图片的缩放方式:
                //        EXACTLY :图像将完全按比例缩小的目标大小
                //        EXACTLY_STRETCHED:图片会缩放到目标大小完全
                //        IN_SAMPLE_INT:图像将被二次采样的整数倍
                //        IN_SAMPLE_POWER_OF_2:图片将降低2倍,直到下一减少步骤,使图像更小的目标大小
                //        NONE:图片不会调整
                .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default
                .handler(new Handler()) // default
                .build();
//displayImage:异步加载并显示图片
ImageLoader.getInstance().displayImage(url,imagview,options); 

注意:url可以是网络、SD卡、assets、drawable,如下:

String url = "http://sd.daicash.cn/data/avatar/f1a7eb0aa2f4dad6136f6c5b50c6f4ee/a_1501_1.jpg";// from Web

String url = "file:///mnt/sdcard/image.png"; // from SD card

String url = "assets://image.png"; // from assets

String url = "drawable://" + R.drawable.image; // from drawables(only images, non-9patch)

String url = "content://media/external/audio/albumart/13"; //from content provider

ImageLoader 加载图片主要分为三类接口:

displayImage(…) 表示异步加载并显示图片到对应的ImageAware上。
loadImage(…) 表示异步加载图片并执行回调接口。
loadImageSync(…) 表示同步加载图片。

参数介绍:

uri: 图片的 uri。uri 支持多种来源的图片,包括 http、https、file、content、assets、drawable 及自定义。
imageAware: 一个接口,表示需要加载图片的对象,可包装 View。
options: 图片显示的配置项。比如加载前、加载中、加载失败应该显示的占位图片,图片是否需要在磁盘缓存,是否需要在内存缓存等。
ImageLoadingListener: 图片加载各种时刻的回调接口,包括开始加载、加载失败、加载成功、取消加载四个时刻的回调函数。
ImageLoadingProgressListener: 图片加载进度的回调接口。

示例:

imageLoader.loadImage(url, new ImageSize(35, 35), options, new ImageLoadingListener() {
            @Override
            public void onLoadingStarted(String imageUri, View view) {

            }

            @Override
            public void onLoadingFailed(String imageUri, View view, FailReason failReason) {

            }

            @Override
            public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {

            }

            @Override
            public void onLoadingCancelled(String imageUri, View view) {

            }
        }, new ImageLoadingProgressListener() {
            @Override
            public void onProgressUpdate(String imageUri, View view, int current, int total) {

            }
        });

这里写图片描述

5、在需要清除缓存的地方可以清除缓存

ImageLoader.getInstance().clearMemoryCache();  // 清除内存缓存

ImageLoader.getInstance().clearDiskCache();  // 清除本地文件缓存

6、设置滚动是否加载

//Universal-Image-Loader提供了PauseOnScrollListener这个类来控制ListView,GridView滑动过程中停止去加载图片。

// 第一个参数就是我们的图片加载对象ImageLoader,
// 第二个参数控制是否在滑动过程中暂停加载图片,如果需要暂停传true就行了,
// 第三个参数控制猛的滑动界面的时候图片是否加载图片,如果需要暂停传true就行了,
listView.setOnScrollListener(new PauseOnScrollListener(ImageLoader.getInstance(), true, true));

关于缓存:

内存缓存默认是:LruMemoryCache,

磁盘缓存默认是:UnlimitedDiscCache。

磁盘缓存文件名默认生成方式:HashCodeFileNameGenerator

1、 内存缓存:相关类继承关系及介绍

MemoryCache:内存缓存的接口,里面定义了内存缓存的先关操作,
            比如:读取一个缓存,放入一个缓存,移除一个缓存,清空缓存
    LruMemoryCache:框架默认,lru算法,强引用
    LimitedAgeMemoryCache:超出时间则删除,强引用
    FuzzyKeyMemoryCache:同一个图片新的尺寸会覆盖缓存中该图片老的尺寸。
    BaseMemoryCache:以强或弱引用的方式保存bitmap,便于虚拟机在内存不足时回收缓存对象。
        WeakMemoryCache:弱引用
        LimitedMemoryCache:强或弱引用,限制存储容量的内存缓存策略,
                            最大容量为16M,未超出容量强引用,超出容量软引用
            FIFOLimitedMemoryCache:先进先出的缓存策略,当超过缓存限定值,
                                    先删除最先加入缓存的bitmap
            LRULimitedMemoryCache:lru算法,弱引用,当超过缓存限定值,
                                    先删除最近最少使用的bitmap
            LargestLimitedMemoryCache:当超过缓存限定值,
                                    先删除最大的bitmap
            UsingFreqLimitedMemoryCache:当超过缓存限定值,
                                    先删除使用次数最少的bitmap

这里写图片描述

2、硬盘缓存:相关类继承关系及介绍

DiskCache
    LruDiskCache:lru算法,默认缓存大小32kb,超出容量则删除最近最少使用。
    BaseDiskCache:默认缓存大小32kb
        LimitedAgeDiskCache:设定文件存活的最长时间,当超过这个值,就删除该文件
        UnlimitedDiskCache:这个缓存类没有时间限制,框架默认

3、 磁盘缓存文件名的生成:相关类继承关系及介绍

FileNameGenerator:在缓存文件时对文件名称的修改
    HashCodeFileNameGenerator:该类负责获取文件名称的hashcode然后转换成字符串。默认
    Md5FileNameGenerator:该类把源文件的名称通过md5加密后保存。

关于图片显示

相关类继承关系及介绍:

BitmapDisplayer:在ImageAware中显示bitmap对象的接口。可在实现中对bitmap做一些额外处理,比如加圆角、动画效果。
    CircleBitmapDisplayer:
            显示原型图片在ImageAware中,实现了BitmapDisplayer接口。主要通过BitmapShader实现。
    FadeInBitmapDisplayer:
            图片淡入方式显示在ImageAware中,实现了BitmapDisplayer接口。
    RoundedBitmapDisplayer:
            为图片添加圆角显示在ImageAware中,实现了BitmapDisplayer接口。主要通过BitmapShader实现。
    RoundedVignetteBitmapDisplayer:
            为图片添加渐变效果的圆角显示在ImageAware中,实现了BitmapDisplayer接口,主要通过RadialGradient实现。
    SimpleBitmapDisplayer:
            直接将图片显示在ImageAware中,实现了BitmapDisplayer接口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值