android——使用Interceptor設置緩存來給服務器減負

爲了優化網絡環境和減輕服務器負擔,不少網絡請求都是可使用緩存的。好比某個界面,每次刷新都會調用接口。這種操做,無形中給服務器增長了幾倍的訪問量。那麼,有沒有方法能夠減小這類無效的訪問呢?答案是確定的。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

相關文章
相關標籤/搜索