zoukankan      html  css  js  c++  java
  • 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日志可以看出,我发起了三次网络请求。三次都得到了结果。

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

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

  • 相关阅读:
    第四周编程总结
    第三周作业编程总结
    第二周基础作业
    【C++学习教程03】面向对象编程的基本知识&内联函数
    【C++学习教程02】运算符
    【C++学习教程01】C++命名空间重名&函数原型&字符类型&数据类型
    为什么匿名内部类只能访问其所在方法中的final变量
    android通过socket上传文件
    android socket编程
    test markdown-here chrome 插件
  • 原文地址:https://www.cnblogs.com/shoneworn/p/9014298.html
Copyright © 2011-2022 走看看