您好,登錄后才能下訂單哦!
通過緩存處理可以有效降低服務器的負荷,加快APP界面加載速度,提升用戶體驗。Retrofit + OkHttp緩存處理流程是這樣的,請求響應之后會在data/data/packageName/cache下建立一個response文件夾,保存緩存數據,后續請求時若無網絡,則直接讀取緩存內容,若有網絡則從網絡獲取最新數據并緩存。
1.設置緩存路徑,大小及添加緩存攔截器
//設置緩存路徑 File httpCacheDirectory = new File(CommonApplication.getInstance().getCacheDir(), "responses"); //設置緩存 10M Cache cache = new Cache(httpCacheDirectory, 10 * 1024 * 1024); //創建OkHttpClient,并添加攔截器和緩存代碼 OkHttpClient client = new OkHttpClient.Builder() .addNetworkInterceptor(new CacheInterceptor(CommonApplication.getInstance())) .cache(cache).build();
2.定義緩存攔截器。若網絡正常,則緩存有效期1分鐘;若網絡異常,則緩存有效期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)) {//沒網強制從緩存讀取(必須得寫,不然斷網狀態下,退出應用,或者等待一分鐘后,就獲取不到緩存) request = request.newBuilder() .cacheControl(CacheControl.FORCE_CACHE) .build(); } Response response = chain.proceed(request); Response responseLatest; if (NetworkUtils.isNetworkAvailable(mContext)) { int maxAge = 60; //有網失效一分鐘 responseLatest = response.newBuilder() .removeHeader("Pragma") .removeHeader("Cache-Control") .header("Cache-Control", "public, max-age=" + maxAge) .build(); } else { int maxStale = 60 * 60 * 6; // 沒網失效6小時 responseLatest = response.newBuilder() .removeHeader("Pragma") .removeHeader("Cache-Control") .header("Cache-Control", "public, only-if-cached, max-stale=" + maxStale) .build(); } return responseLatest; } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。