Android下载图片 同一地址资源不改变问题




在Android项目中,图片下载是经常的事情。这里写一个萌新博主碰到的坑,就是关于同一地址资源改变的问题。

如果是直接使用的图片加载框架,在这个地方一定会碰到,地址的资源变了,但是大家下载下来的图片并没有改变。稍微一想大家就可以知道是因为框架中将这个图片地址给缓存了,然后并没有去再次加载图片地址里面最新的资源,而是采用了之前缓存下的资源,所以图片没有显示最新的。

在这里博主之前最早使用的是Glide ,采用了网上给出的 ,

1.设置跳过内存缓存,禁用内存缓存
 Glide.with(this)
.load(imageUrl)
.diskCacheStrategy( DiskCacheStrategy.NONE )//禁用磁盘缓存  
.skipMemoryCache( true )//跳过内存缓存  
into(imageView);
但是不起作用。

也使用了


2.清除缓存

Glide.get(this).clearDiskCache();//只能在后台使用 清除磁盘缓存

Glide.get(this).clearMemory();//只能在UI线程中使用 清除Gilde内存缓存

但是这种方法清楚磁盘缓存在后台耗时操作,并不方便实时调用。


3.使用签名

传入当前的时间,作为签名,让Gilde去加载数据

Glide.with(this)  
                    .load(imageurl)  
                    .signature(new StringSignature(String.valueOf(System.currentTimeMillis())))   
                    .diskCacheStrategy(DiskCacheStrategy.SOURCE)
                    .placeholder(R.drawable.placeholder)  
                    .into(imageItem);

这个方法博主也使用了,但是不知道为什么,会有图片错乱的问题,博主没有得到正解。

 

然后博主想到了Gilde第一个方法为什么错误,是不是网络加载没有关闭,因为从代码上看并没有关闭网络缓存,但是基本得图片三级缓存机制必有得网络缓存。


4.于是乎博主采用用了Picasso框架(为什么不用Fresco,轻量级的都不推荐使用Fresco,这里就不过多去介绍这些基本的了),里面关闭网络缓存,关闭内存缓存吗,实现真正的直接去加载url的资源(虽然说每次都在家同一地址,会很费流量,但是在这里为了需求就是得这样做啊,哎)

Picasso.with(context)
        .load(url)
        .placeholder(R.mipmap.head_nol)
        .memoryPolicy(MemoryPolicy.NO_CACHE)
        .networkPolicy(NetworkPolicy.NO_CACHE)
        .error(R.mipmap.head_nol)
        .into(imageView);

 然后楼主就出坑了,234方法都可以从不同的方面解决这个问题,采用哪一个就看大家自己的做法了。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值