Retrofit + OkHttp緩存處理的示例代碼
通過緩存處理可以有效降低服務(wù)器的負(fù)荷,加快APP界面加載速度,提升用戶體驗。Retrofit + OkHttp緩存處理流程是這樣的,請求響應(yīng)之后會在data/data/packageName/cache下建立一個response文件夾,保存緩存數(shù)據(jù),后續(xù)請求時若無網(wǎng)絡(luò),則直接讀取緩存內(nèi)容,若有網(wǎng)絡(luò)則從網(wǎng)絡(luò)獲取最新數(shù)據(jù)并緩存。
1.設(shè)置緩存路徑,大小及添加緩存攔截器
//設(shè)置緩存路徑
File httpCacheDirectory = new File(CommonApplication.getInstance().getCacheDir(), "responses");
//設(shè)置緩存 10M
Cache cache = new Cache(httpCacheDirectory, 10 * 1024 * 1024);
//創(chuàng)建OkHttpClient,并添加攔截器和緩存代碼
OkHttpClient client = new OkHttpClient.Builder()
.addNetworkInterceptor(new CacheInterceptor(CommonApplication.getInstance()))
.cache(cache).build();
2.定義緩存攔截器。若網(wǎng)絡(luò)正常,則緩存有效期1分鐘;若網(wǎng)絡(luò)異常,則緩存有效期6小時
public class CacheInterceptor implements Interceptor {
private Context mContext;
public CacheInterceptor(Context context) {
mContext = context;
}
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
if (NetworkUtils.isNetworkAvailable(mContext)) {//沒網(wǎng)強制從緩存讀取(必須得寫,不然斷網(wǎng)狀態(tài)下,退出應(yīng)用,或者等待一分鐘后,就獲取不到緩存)
request = request.newBuilder()
.cacheControl(CacheControl.FORCE_CACHE)
.build();
}
Response response = chain.proceed(request);
Response responseLatest;
if (NetworkUtils.isNetworkAvailable(mContext)) {
int maxAge = 60; //有網(wǎng)失效一分鐘
responseLatest = response.newBuilder()
.removeHeader("Pragma")
.removeHeader("Cache-Control")
.header("Cache-Control", "public, max-age=" + maxAge)
.build();
} else {
int maxStale = 60 * 60 * 6; // 沒網(wǎng)失效6小時
responseLatest = response.newBuilder()
.removeHeader("Pragma")
.removeHeader("Cache-Control")
.header("Cache-Control", "public, only-if-cached, max-stale=" + maxStale)
.build();
}
return responseLatest;
}
}
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android使用ExpandableListView實現(xiàn)三層嵌套折疊菜單
這篇文章主要介紹了Android使用ExpandableListView實現(xiàn)三層嵌套折疊菜單,對布局感興趣的同學(xué)可以參考下2021-04-04
Android實現(xiàn)可輸入數(shù)據(jù)的彈出框
這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)可輸入數(shù)據(jù)的彈出框,文章提供了兩種方式,示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-01-01
Android Studio 設(shè)置代碼提示和代碼自動補全快捷鍵方式
這篇文章主要介紹了Android Studio 設(shè)置代碼提示和代碼自動補全快捷鍵方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03
詳解Android自定義控件屬性TypedArray以及attrs
這篇文章主要為大家介紹了android自定義控件屬性TypedArray以及attrs,感興趣的小伙伴們可以參考一下2016-01-01
詳解Android WebView的input上傳照片的兼容問題
本篇文章主要介紹了詳解Android WebView的input上傳照片的兼容問題,非常具有實用價值,需要的朋友可以參考下2017-08-08
Android實現(xiàn)自動變換大小的組件ViewPager2
這篇文章主要介紹了Android實現(xiàn)自動變換大小的組件ViewPager2,ViewPager2最顯著的特點是基于RecyclerView實現(xiàn),RecyclerView是目前Android端最成熟的AdapterView解決方案2023-03-03

