Picasso 是 Square 公司开源的一个非常友好的图片加载框架,使用范围也比较广泛。具体的使用这里就不做介绍了,文章主要讲讲如何修改图片的缓存路径。Picasso默认的缓存路径位于data/data/your package name/cache/picasso-cache/
下。开发过程中我们难免会遇到一些需求,需要我们去修改图片的缓存路径。
分析
我们注意到,Picasso 底层其实是使用OkHttp
去下载图片,同时在设置Picasso
的时候,有一个.downloader(Downloader downloader)
方法,我们可以传递进去一个OkHttpDownloader( OkHttpClient client)
Picasso picasso = new Picasso.Builder(Context)
.downloader(new OkHttpDownloader(client))
.build();
看到这里你可能已经想到了,我们给OkHttpClient
设置Cache
不就可以了吗,对,你没有猜错,实际就是这么干的。我们只需要给OkHttpClient
设置.cache(new Cache(file, maxSize))
就可以实现修改缓存路径了。
实现
废话不多说,直接上代码:
File file = new File("your cache path");
if (!file.exists()) {
file.mkdirs();
}
long maxSize = Runtime.getRuntime().maxMemory() / 8;//设置图片缓存大小为运行时缓存的八分之一
OkHttpClient client = new OkHttpClient.Builder()
.cache(new Cache(file, maxSize))
.build();
Picasso picasso = new Picasso.Builder(this)
.downloader(new OkHttpDownloader(client))
.build();
没错就是这么简单,几行代码,你便成功的修改了缓存路径。但是。。。。,当你把OkHttp
升级到OkHttp3
的时候,你会发现给downloader
设置OkHttpDownloader()
的时候,发现它并不支持OkHttp3
,这不是 shit 吗,不能因为这一个小问题,让我把OkHttp3
替换成低版本吧。其实这是有办法解决的。
使用 OkHttp3Downloader
为了解决上面描述的不能使用OkHttp3
作为下载器的问题,Picasso
作者jakewharton
大神专门写了一个OkHttp3Downloader
库。使用也非常简单,在Module dependencies
添加依赖:
compile 'com.jakewharton.picasso:picasso2-okhttp3-downloader:1.1.0'
然后设置downloader
的时候改为OkHttp3Downloader
即可:
File file = new File("your cache path");
if (!file.exists()) {
file.mkdirs();
}
long maxSize = Runtime.getRuntime().maxMemory() / 8;//设置图片缓存大小为运行时缓存的八分之一
OkHttpClient client = new OkHttpClient.Builder()
.cache(new Cache(file, maxSize))
.build();
Picasso picasso = new Picasso.Builder(this)
.downloader(new OkHttp3Downloader(client))//注意此处替换为 OkHttp3Downloader
.build();
至此,我们就完成了Picasso
缓存路径的修改。