博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android——UIL实现图片缓存基本配置及使用
阅读量:6960 次
发布时间:2019-06-27

本文共 4182 字,大约阅读时间需要 13 分钟。

 

一, 为什么要使用图片缓存

      在说为什么要使用图片缓存之前,先说说为什么要使用缓存?可能之前我们使用过cache, L1 cache,cookie,Session,Memcached,redis,encache,sharedPreference...这么多缓存,无非是为了避免多次读取磁盘或者网络,提高速度;(还要理解缓存的使用条件)。

       接下来说说为啥要使用“图片缓存”:

      当客户端在请求网络数据的时候,是需要消耗流量的,特别是对于移动端用户来说,对于流量的控制要求很高。所以在做网络请求的时候,如果对数据更新要求不是特别高,往往都会用到缓存机制,一方面能减少对服务端的请求,控制流量;另一方面,当客户端在没有网络的情况下也能 看到上一次请求的数据,这样使用户体验更佳。

二,UIL(Android-Universal-Image-Loader)

   图片缓存,目前使用最广泛的图片缓存,支持主流图片缓存的绝大多数特性。
   项目地址:
   原理剖析文档:
   Demo 地址:
   文档介绍:

三,基本使用方法

1,引入jar包

 

2,全局Application配置

3,   **

 * Created by LiuHuiChao on 2015/11/5.
 */
public class myApplication extends Application {
   
@Override
   
public void onCreate() {
       
super.onCreate();
       
//设置获取缓存的目录:测试使用
      
// File cacheDir=StorageUtils.getOwnCacheDirectory(this,"JRKJ/cache");
       
/*
        * configuration表示ImageLoader的全局配置信息,创建ImageLoader时使用
       
* 可包括图片最大尺寸,线程池,缓存,下载器,解码器等等。
       
* 这里可以根据需要自行配置,修改慎重!
       
* */
        ImageLoaderConfigurationconfiguration =new ImageLoaderConfiguration.Builder(this)
               
.memoryCacheExtraOptions(480, 800)/*解析图片时候使用的最大尺寸,默认为屏幕设备宽高*/
               
.diskCacheExtraOptions(480, 800, null)/*从网络下载图片后保存到磁盘时使用的图片尺寸及压缩方法,如果不设置则保存原始图片*/
               
.threadPoolSize(3)/*线程池的大小,默认值为3,注意不要设置的过大,过大之后会有OOM问题*/
               
.threadPriority(Thread.NORM_PRIORITY - 1)/*设置线程的优先级别:5-1*/
               
/*
                * tasksProcessingOrder:设置图片加载和显示队列处理的类型 默认为QueueProcessingType.
               
FIFO:如果设置了taskExecutor或者taskExecutorForCachedImages 此设置无效
               
*/
                .tasksProcessingOrder(QueueProcessingType.FIFO)
               
.memoryCache(new LruMemoryCache(2 * 1024 * 1024))/*设置内存缓存 默认为一个当前应用可用内存的1/8大小的LruMemoryCache*/
               
.memoryCacheSize(2 * 1024 * 1014)/*设置内存缓存的最大大小 默认为一个当前应用可用内存的1/8    */
                .memoryCacheSizePercentage(13)/*设置内存缓存最大大小占当前应用可用内存的百分比 默认为一个当前应用可用内存的1/8*/
               
.diskCache(new UnlimitedDiskCache(StorageUtils.getCacheDirectory(getApplicationContext())))/*默认为StorageUtils.getCacheDirectory(getApplicationContext()),/mnt/sdcard/android/data/包名/cache/*/
               
.diskCacheSize(50 * 1024 * 1024)/*设置硬盘缓存的最大大小*/
               
.diskCacheFileCount(100)/*设置硬盘缓存的文件的最多个数*/
               
.diskCacheFileNameGenerator(new HashCodeFileNameGenerator())/*设置硬盘缓存文件名生成规范*/
               
.imageDownloader(new BaseImageDownloader(this))/*设置图片下载器*/
               
.imageDecoder(DefaultConfigurationFactory.createImageDecoder(false))/*设置图片解码器*/
               
.defaultDisplayImageOptions(DisplayImageOptions.createSimple())/*设置默认的图片显示选项*/
               
.denyCacheImageMultipleSizesInMemory()/*不缓存图片的多种尺寸在内存中*/
               
.writeDebugLogs()/*打印调试Log,注意上线之前要去掉这句话*/
               
.imageDownloader(/*图片下载器的设置*/
                       
new BaseImageDownloader(this, 5 * 1000, 30 * 100)/*connectTimeout,readTimeout)超时时间*/
               
)
               
.build();
       
ImageLoader.getInstance().init(configuration);/*使用基本配置信息初始化ImageLoader*/
   
}
}

 

 

4,AndroidManifest.xml中配置

权限设置:

 

Applicatian的name设置:

5,方法一:使用DisplayImageOptions+loadImage配置加载图片

6,    imgDemoPic=(ImageView)findViewById(R.id.imgDemoPic);//imageView用来显示图片/*图片地址*/String imgUrl="http://f.hiphotos.baidu.com/baike/c0%3Dbaike80%2C5%2C5%2C80%2C26/sign=597e2ad1a7c27d1eb12b33967abcc60b/21a4462309f790521563df4b0ff3d7ca7bcbd543.jpg";ImageSize mImageSize=new ImageSize(100,100);/*方法一:使用DisplayImageOptions+loadImage配置加载图片*///显示图片的配置/*DisplayImageOptions options=new DisplayImageOptions.Builder()                            .cacheInMemory(true)                            .cacheOnDisk(true)                            .bitmapConfig(Bitmap.Config.RGB_565)                            .build();ImageLoader.getInstance().loadImage(imgUrl,mImageSize,new SimpleImageLoadingListener(){    @Override    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {        super.onLoadingComplete(imageUri, view, loadedImage);        imgDemoPic.setImageBitmap(loadedImage);//显示在imageView上面    }});*/

 

7,方法二:使用使用DisplayImageOptions+displayImage加载图片

 

/*方法二:使用使用DisplayImageOptions+displayImage加载图片*/DisplayImageOptions options=new DisplayImageOptions.Builder()                            .showImageOnLoading(R.drawable.image1)/*加载图片的时候显示正在加载的图*/                            .showImageOnFail(R.drawable.image1)/*加载图片失败后显示这个张图*/                            .cacheInMemory(true)/*缓存至内存*/                            .cacheOnDisk(true)/*缓存值SDcard*/                            .bitmapConfig(Bitmap.Config.RGB_565)                            .build();ImageLoader.getInstance().displayImage(imgUrl,imgDemoPic,options);

四,Run一下看看吧

      会发现加载过一遍之后,没有网的时候,会使用内存中的缓存图片或者disk中的缓存图片来显示,就像大家常用的QQ空间,没网的时候,也会看到空间中我们以前浏览过的内容。

转载地址:http://vtqil.baihongyu.com/

你可能感兴趣的文章
Linux下 mplayer 使用手册
查看>>
DataSnap 2009 客户端扩展
查看>>
如何在Oracle中复制表结构和表数据
查看>>
将一些类型设计成集合模式
查看>>
《iOS应用逆向工程:分析与实战》
查看>>
Java反射机制(获取Class对象的三种方式+获取Class中的构造函数进行对象的初始化+获取反射类的字段+获取反射类的一般方法)...
查看>>
es6学习笔记10--箭头函数
查看>>
linux下编译安装vim7.4并安装clang_complete插件
查看>>
Scrapy集成selenium+PhantomJS+代理IP 解析js动态内容
查看>>
传统项目目录结构下maven+junit+junitReport
查看>>
SurveyMonkey上市:募资1.8亿美元 Facebook COO为二股东
查看>>
四川一面包车里“人叠人”:核载7人实载24人
查看>>
西班牙欲吸引大量中国游客 签证时间能否再缩短?
查看>>
吉林艺术学院监考人员被指为考生改画 学校回应
查看>>
Swift 的坑:static var 的初始化时机并不确定
查看>>
物联网巨头时代下细分市场独角兽图鉴
查看>>
Spring Boot干货系列:(三)启动原理解析 | 掘金技术征文
查看>>
RunLoop 浅析
查看>>
浅谈 KVC
查看>>
ECS 按量付费VPC实例停机不收费FAQ
查看>>