爲了優化網絡環境和減輕服務器負擔,不少網絡請求都是可使用緩存的。好比某個界面,每次刷新都會調用接口。這種操做,無形中給服務器增長了幾倍的訪問量。那麼,有沒有方法能夠減小這類無效的訪問呢?答案是確定的。java
給網絡請求加上緩存。並設置緩存時間,當在這個時間段類,能夠不用訪問服務器,直接拿到上次訪問獲得的數據。這樣,在有效期內,即使網絡斷開,只要還在緩存有效期內,也能夠拿到服務端返回的數據。緩存
/** * Created by admin on 2018/5/8. */ public class NetworkInterceptor implements Interceptor { @Override public Response intercept(Chain chain) throws IOException { //1、不管有無網路都添加緩存。 Request request = chain.request(); Response response = chain.proceed(request); int maxAge = 60; return response.newBuilder() .removeHeader("Pragma") .removeHeader("Cache-Control") .addHeader("name","shone") .header("Cache-Control", "public, max-age=" + maxAge) .build(); } }
將Interceptor加入到請求中服務器
private void testOnlyRequest() throws Exception{ File cacheFile = new File(this.getApplication().getCacheDir(), "caheData"); //設置緩存大小 Cache cache = new Cache(cacheFile, 1024*1024*14);//google建議放到這裏 //步驟1、建立okhttp3 client final OkHttpClient client = new OkHttpClient.Builder() .retryOnConnectionFailure(true) .connectTimeout(15,TimeUnit.SECONDS) .addNetworkInterceptor(new CacheInterceptor())//這裏你們必定要注意了是addNetworkOnterceptor別搞錯了啊。 .cache(cache) .build(); new Thread(new Runnable() { @Override public void run() { Retrofit retrofit= new Retrofit.Builder() .baseUrl("http://fy.iciba.com/") .client(client) .addConverterFactory(GsonConverterFactory.create()) .build(); GetRequest_Interface request = retrofit.create(GetRequest_Interface.class); Call<Translation1> call= request.getCall_1(); Translation1 translation1 = null; try { translation1 = call.execute().body(); translation1.show(); } catch (IOException e) { e.printStackTrace(); } } }).start(); }
看看效果:網絡
log日誌能夠看出,我發起了三次網絡請求。三次都獲得告終果。ide
在看看我抓包日誌。能夠看出,我只進行了一次服務器請求。優化
經過示例,應該能夠看出,添加了緩存,能夠明顯下降服務器請求次數。ui