Android 图片缓存框架ImageLoader

本文只讲ImageLoader的优点及快速在Android studio中集成使用,当做笔记了。

一、ImageLoader图片加载设计及优点介绍

1,使用简单

可以通过一句代码可实现图片获取和显示。

2,可配置度高,自适应程度高

图片缓存的下载器(重试机制)、解码器、显示器、处理器、内存缓存、本地缓存、线程池、缓存算法等大都可轻松配置。根据系统性能初始化缓存配置、系统信息变更后动态调整策略

3,多级缓存

至少有两级缓存、提高图片加载速度。

4,支持多种数据源

支持多种数据源,网络、本地、资源等。

5,支持多种 Displayer

不仅仅支持 ImageView,同时支持其他 View 以及虚拟的 Displayer 概念

6,支持下载进度监听;

7,可以在 View 滚动中暂停图片加载;

通过 PauseOnScrollListener 接口可以在 View 滚动中暂停图片加载。

8,默认实现多种内存缓存算法

ImageLoader 默认实现了较多缓存算法,如 Size 最大先删除、使用最少先删除、最近最少使用、先进先删除、时间最长先删除等。

9, 支持本地缓存文件名规则定义

MD5加密等

二、Android studio中快速集成

1,在相对应的moudule下的gradle文件中声明依赖包

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

2,AndroidManifest.xml中设置需要的权限

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

3,在应用中配置ImageLoaderConfiguration参数(只能配置一次,如多次配置,则默认第一次的配置参数),所以可以放到application中进行配置

①ImageLoaderConfiguration简介

ImageLoaderConfiguration是针对图片缓存的全局配置,主要有线程类、缓存大小、磁盘大小、图片下载与解析、日志方面的配置。所以一般我们在application中配置一次就可以了。

②设置ImageLoaderConfiguration

a、使用默认设置

ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(this);

b、自己配置参数

        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
                    .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
                    .writeDebugLogs() // 打印debug log
                    .build(); //开始构建

③初始化ImageLoder(配置好ImageLoaderConfiguration后,在application中进行初始化)

ImageLoader.getInstance().init(config);

4,图片显示操作

①设置DisplayImageOptions

用于指导每一个Imageloader根据网络图片的状态(空白、下载错误、正在下载)显示对应的图片,是否将缓存加载到磁盘上,下载完后对图片进行怎么样的处理。

DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showImageOnLoading(R.drawable.ic_stub) // 设置图片下载期间显示的图片
                .showImageForEmptyUri(R.drawable.ic_empty) // 设置图片Uri为空或是错误的时候显示的图片
                .showImageOnFail(R.drawable.ic_error) // 设置图片加载或解码过程中发生错误显示的图片
                .resetViewBeforeLoading(false)  // default 设置图片在加载前是否重置、复位
                .delayBeforeLoading(1000)  // 下载前的延迟时间
                .cacheInMemory(false) // default  设置下载的图片是否缓存在内存中
                .cacheOnDisk(false) // default  设置下载的图片是否缓存在SD卡中
                .preProcessor(...)
                .postProcessor(...)
                .extraForDownloader(...)
                .considerExifParams(false) // default
                .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default 设置图片以如何的编码方式显示
                .bitmapConfig(Bitmap.Config.ARGB_8888) // default 设置图片的解码类型
                .decodingOptions(...)  // 图片的解码设置
                .displayer(new SimpleBitmapDisplayer()) // default  还可以设置圆角图片new RoundedBitmapDisplayer(20)
                .handler(new Handler()) // default
                .build();

②显示图片

    a、ImageLoader.getInstance().displayImage(uri, imageView, options);
    b、ImageLoader.getInstance().displayImage(uri, imageView, options, listener);
    c、ImageLoader.getInstance().displayImage(uri, imageView, options, listener, progressListener);

参数解释:

    imageUrl   图片的URL地址
    imageView  显示图片的ImageView控件  
    options    DisplayImageOptions配置信息 
    listener   图片下载情况的监听
    progressListener  图片下载进度的监听

参考文章:
http://www.cnblogs.com/linghu-java/p/5741358.html

http://www.cnblogs.com/linghu-java/p/5741358.html

http://www.cnblogs.com/kissazi2/p/3886563.html

猜你喜欢

转载自blog.csdn.net/u014434080/article/details/62236368