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

相关文章
相关标签/搜索