博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android——使用Interceptor设置缓存来给服务器减负
阅读量:6278 次
发布时间:2019-06-22

本文共 2312 字,大约阅读时间需要 7 分钟。

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

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

/** * 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
call= request.getCall_1(); Translation1 translation1 = null; try { translation1 = call.execute().body(); translation1.show(); } catch (IOException e) { e.printStackTrace(); } } }).start(); }

 看看效果:

log日志可以看出,我发起了三次网络请求。三次都得到了结果。

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

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

转载于:https://www.cnblogs.com/shoneworn/p/9014298.html

你可能感兴趣的文章
类对象定义 二
查看>>
收费视频网站Netflix:用户到底想要“点”什么?
查看>>
MacOS High Sierra 12 13系统转dmg格式
查看>>
关于再次查看已做的多选题状态逻辑问题
查看>>
动态下拉菜单,非hover
查看>>
政府安全资讯精选 2017年第十六期 工信部发布关于规范互联网信息服务使用域名的通知;俄罗斯拟建立备用DNS;Google打击安卓应用在未经同意情况下收集个人信...
查看>>
简单易懂的谈谈 javascript 中的继承
查看>>
iOS汇编基础(四)指针和macho文件
查看>>
Laravel 技巧锦集
查看>>
Android 使用 ViewPager+RecyclerView+SmartRefreshLayout 实现顶部图片下拉视差效果
查看>>
Flutter之基础Widget
查看>>
写给0-3岁产品经理的12封信(第08篇)——产品运营能力
查看>>
ArcGIS Engine 符号自动化配置工具实现
查看>>
小程序 · 跳转带参数写法,兼容url的出错
查看>>
flutter error
查看>>
Flask框架从入门到精通之模型数据库配置(十一)
查看>>
10年重新出发
查看>>
2019年-年终总结
查看>>
聊聊elasticsearch的RoutingService
查看>>
让人抓头的Java并发(一) 轻松认识多线程
查看>>