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
緩存路徑的修改。