android——使用Interceptor设置缓存来给服务器减负

为了优化网络环境和减轻服务器负担,很多网络请求都是可以使用缓存的。比如某个界面,每次刷新都会调用接口。这种操作,无形中给服务器增加了几倍的访问量。那么,有没有方法可以减少这类无效的访问呢?答案是肯定的。

给网络请求加上缓存。并设置缓存时间,当在这个时间段类,可以不用访问服务器,直接拿到上次访问得到的数据。这样,在有效期内,即便网络断开,只要还在缓存有效期内,也可以拿到服务端返回的数据。

/**
 * Created by admin on 2018/5/8.
 */

public class NetworkInterceptor implements Interceptor {

    @Override
    public Response intercept(Chain chain) throws IOException {
        //一、无论有无网路都添加缓存。
        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建议放到这里

        //步骤一、创建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日志可以看出,我发起了三次网络请求。三次都得到了结果。

在看看我抓包日志。可以看出,我只进行了一次服务器请求。

通过示例,应该可以看出,添加了缓存,可以明显降低服务器请求次数。

posted @ 2018-05-09 15:05  shoneworn  阅读(1213)  评论(0编辑  收藏  举报