Android ImageLoader图片缓存框框架修改缓存使用的KEY.

来源:互联网 发布:淘宝写论文有靠谱的吗 编辑:程序博客网 时间:2024/04/26 09:15


因为最近在工作中 使用阿里云的OSS文件存储服务器时,文件访问使用的private,生成的访问路径是App内部根据阿里云的accessKeyId,bucketName,accessKeySecret和endPoint,以及连接有效时间动态生成的,连接在一段时间后会变更,而且在list列表中,每次getView都会重新生成新的路径这样对于,重新从网络下载图片这样,图片缓存也形同虚设(因为imageloader默认使用,图片URL作为key,但是这里使用的路径每次访问都会更改)。

那么接下来进入正题。

目前关于ImageLoader的文章到处都是,关于这个的我就不再多做介绍。

然后接下的内容也不全都是我自己写的。都是看了别人的文章之后写的。所以。。。所以什么来的,忘了。。忘了就算了吧。我都不介意。你们也别介意了。

ImageLoader是单例的

public static ImageLoader getInstance() {
if (instance == null) {
synchronized (ImageLoader.class) {
if (instance == null) {
instance = new ImageLoader();
}
}
}
return instance;
}

所有我们要在他初始化的时候进行修改:


ImageLoaderConfiguration config = new ImageLoaderConfiguration  
    .Builder(context)  
    .memoryCacheExtraOptions(480, 800) // max width, max height,即保存的每个缓存文件的最大长宽  
    .discCacheExtraOptions(480, 800, CompressFormat.JPEG, 75, null) // Can slow ImageLoader, use it carefully (Better don't use it)/设置缓存的详细信息,最好不要设置这个 
    .threadPoolSize(3)//线程池内加载的数量  
    .threadPriority(Thread.NORM_PRIORITY - 2)  
    .denyCacheImageMultipleSizesInMemory()  
    .memoryCache(new UsingFreqLimitedMemoryCache(2 * 1024 * 1024)) // You can pass your own memory cache implementation/你可以通过自己的内存缓存实现  
    .memoryCacheSize(2 * 1024 * 1024)    
    .discCacheSize(50 * 1024 * 1024)    
    .discCacheFileNameGenerator(new Md5FileNameGenerator())//将保存的时候的URI名称用MD5 加密  
    .tasksProcessingOrder(QueueProcessingType.LIFO)  
    .discCacheFileCount(100) //缓存的文件数量  
    .discCache(new UnlimitedDiscCache(cacheDir))//自定义缓存路径  
    .defaultDisplayImageOptions(DisplayImageOptions.createSimple())  
    .imageDownloader(new BaseImageDownloader(context, 5 * 1000, 30 * 1000)) // connectTimeout (5 s), readTimeout (30 s)超时时间  
    .writeDebugLogs() // Remove for release app  
    .build();//开始构建  

imageLoader.init(config); //----------------------->这里就是初始化的地方。

我们要修改的地方就是这个  discCacheFileNameGenerator(new Md5FileNameGenerator())


重写 Md5FileNameGenerator()


discCacheFileNameGenerator(new Md5FileNameGenerator() {
@Override
public String generate(String imageUri) {
String imageName = imageUri;
try {
imageName = imageUri.split("OSSAccessKeyId=")[0];
} catch (Exception e) {
// e.printStackTrace();
}
return super.generate(imageName);
}
})//


一目了然,就是重写了他的public String generate(String imageUri) 方法,将返回返回值改成了自己想要的那部分不会改变的值,而动态生成的部分直接忽略了。


有没有看懂呀。应该都能看懂吧。毕竟这么简单。

这是我的第一篇技术文档。写这个的目的其实也是为了自己以后查询使用。不为别的。就因为以前我讲自己写的一些demo挡在U盘里面,时间一久,自己都忘了那个是那个的。写在这里。还可以有文字 可以查考。当然如果能够帮到别人就更好了。毕竟我是一个乐于分享的好少年








0 0
原创粉丝点击