etag android,android – 改装ETAG和缓存
有没有适当的解释如何添加缓存和ETAG / If-None-Match支持到Retrofit OkHttp?
我正在努力在2个项目中添加Etag支持,如果起初我怀疑HTTP头可能有问题,另一个项目的一切设置正确,并且缓存仍然无法正常工作.
以下是我尝试使其工作的尝试.结果显示,缓存似乎在应用程序的同一个实例中正常工作,但是一旦我重新启动,一切都会重新加载.
此外,在我的日志中,我没有看到If-None-Match被添加到请求中,所以我认为服务器不知道ETag,并且仍然完全重新计算响应.
以下是一些代码示例:
public class RetrofitHttpClient extends UrlConnectionClient
{
private OkUrlFactory generateDefaultOkUrlFactory()
{
OkHttpClient client = new com.squareup.okhttp.OkHttpClient();
try
{
Cache responseCache = new Cache(baseContext.getCacheDir(), SIZE_OF_CACHE);
client.setCache(responseCache);
}
catch (Exception e)
{
Logger.log(this, e, "Unable to set http cache");
}
client.setConnectTimeout(READ_TIMEOUT, TimeUnit.MILLISECONDS);
client.setReadTimeout(CONNECT_TIMEOUT, TimeUnit.MILLISECONDS);
return new OkUrlFactory(client);
}
private final OkUrlFactory factory;
public RetrofitHttpClient()
{
factory = generateDefaultOkUrlFactory();
}
@Override
protected HttpURLConnection openConnection(retrofit.client.Request request) throws IOException
{
return factory.open(new URL(request.getUrl()));
}
}
然后使用FULL日志级别和自定义标签创建Rest适配器:
restAdapter = new RestAdapter.Builder()
.setClient(new RetrofitHttpClient())
.setEndpoint(Config.BASE_URL)
.setRequestInterceptor(new SignatureSetter())
.setConverter(new JacksonConverter(JsonHelper.getObjectMapper()))
.setLogLevel(RestAdapter.LogLevel.FULL)
.setLog(new AndroidLog("=NETWORK="))
.build();
我在应用程序的第一个屏幕上有一个很长的请求进行测试.
当我打开应用程序 – 完成请求需要7秒钟.如果我暂停和恢复应用程序 – 相同的请求需要250ms,清楚地击中缓存.如果我完全关闭应用程序并重新启动 – 它再次需要7秒钟.
更新:
如所建议的,我使用了一个自定义的Retrofit构建并附加了一个LoggingInterceptor.这是我得到的
Received response for *** in 449,3ms
Date: Wed, 07 Jan 2015 09:02:23 GMT
Server: Apache
X-Powered-By: PHP/5.4.31
Access-Control-Allow-Credentials: true
Pragma:
Cache-Control: public, max-age=3600
X-Frame-Options: SAMEORIGIN
Etag: "hLxLRYztkinJAB453nRV7ncBSuU=-gzip"
Last-Modified: Wed, 24 Dec 2014 13:09:04 GMT
Vary: Accept-Encoding
Content-Encoding: gzip
Keep-Alive: timeout=2, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json; charset=UTF-8
OkHttp-Selected-Protocol: http/1.1
OkHttp-Sent-Millis: 1420621288104
OkHttp-Received-Millis: 1420621288554
Sending request **** on Connection{****:80, proxy=DIRECT@ hostAddress=**** cipherSuite=none protocol=http/1.1}
Accept: application/json;
Host: ****
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/2.2.0
Response is equal to described above
如您所见,下一个请求中不存在If-None-Match标题
etag android,android – 改装ETAG和缓存相关推荐
- android 内部存储 清空,Android清空应用内部文件缓存
Android应用中加载的图片以及一些数据缓存怎么清掉呢?最近在做项目中遇到了这个问题,网上搜了一下找到了不少的源代码,综合了这些源码,下面给大家说一下吧,怎么有效的清除应用内存的缓存信息? 清除应用 ...
- Android中图片的三级缓存策略
在开发过程中,经常会碰到进行请求大量的网络图片的样例.假设处理的不好.非常easy造成oom.对于避免oom的方法,无非就是进行图片的压缩.及时的回收不用的图片.这些看似简单可是处理起来事实上涉及的知 ...
- android 缓存文件的工具类,总结的一些android公共库,包含缓存(图片缓存、预取缓存)、...
总结的一些android公共库,包含缓存(图片缓存.预取缓存).公共View(下拉及底部加载更多ListView.底部加载更多ScrollView.滑动一页Gallery).及工具类(下载管理.静默安 ...
- Android 系统(173)---Android中图片的三级缓存
Android中图片的三级缓存 为什么要使用三级缓存 如今的 Android App 经常会需要网络交互,通过网络获取图片是再正常不过的事了 假如每次启动的时候都从网络拉取图片的话,势必会消耗很多流量 ...
- Android Glide数据更新及内存缓存、硬盘缓存清理
[转] 原文 Android Glide数据更新及内存缓存.硬盘缓存清理 Android的Glide在加载图片时候内部默 ...
- Android okHttp网络请求之缓存控制Cache-Control
前言: 前面的学习基本上已经可以完成开发需求了,但是在项目中有时会遇到对请求做个缓存,当没网络的时候优先加载本地缓存,基于这个需求我们来学习一直okHttp的Cache-Control. okHttp ...
- Android学习系列(27)--App缓存管理
随笔- 53 文章- 10 评论- 1064 Android学习系列(27)--App缓存管理 无论大型或小型应用,灵活的缓存可以说不仅大大减轻了服务器的压力,而且因为更快速的用户体验而方便了用户. ...
- Android视频点播-边播边缓存-方案
Android视频点播-边播边缓存-方案 简述 一些知名的视频app客户端(优酷,爱奇艺)播放视频的时候都有一些缓存进度(二级进度缓存),qq,微信有关的小视频,还有一些短视频app,都有边播边缓的处 ...
- Android程序一直吐司获取缓存记录失败 —— 极光推送
问题: Android程序Toast提示 " 获取缓存记录失败 " ,看的很是别扭,而且想知道原因在哪里. 方案: 接入了极光推送所造成的原因. Android Studio双击S ...
- Android记录25-WebView实现离线缓存阅读
Android记录25-WebView实现离线缓存阅读 前言 本篇博客要实现的是一个离线下载和离线阅读的功能,这是很多阅读类app都常见的一个功能,典型的应用就是网易新闻.什么是离线下载?其实这个概念 ...
最新文章
- Java学习-jsp内置对象Session
- nlp文本数据增强_如何使用Texthero为您的NLP项目准备基于文本的数据集
- 数据库命名规则(转)
- memcached客户端_对比Memcached和Redis,谁才是适合你的缓存?
- react部署之页面空白
- jQuery remove 内存 释放
- 在单元测试中访问私有字段
- Eclipse 答疑:Eclipse 如何更换夜间及外部主题?如何修改代码样式、背景颜色、字体大小?为何注释文字大小不一?
- 涡轮增压扫地机器人_帮着做家务,好坏在哪里,科沃斯T5扫地机器人
- JEECG开源社区, 成立了微信二次开发项目,欢迎有兴趣朋友参与
- 利用colab训练YOLOv5
- nginx+uwsgi 部署
- test1 exam3编程计算图形的面积
- 独立软件测试团队在敏捷开发中的几个特别实践
- 字符串的HashCode可能相同
- qca9533的TPlink wr841N换openwrt固件的一点体会
- 【算法】基于AOE网的关键路径算法
- Android UI 之一步步教你自定义控件(自定义属性、合理设计onMeasure、合理设计onDraw等)
- 用js创建audio对象实现网页迷你音乐播放器
- 计算机端口怎么配置波特率,PLC波特率设置
热门文章
- Python二维数组赋值问题
- Python图像处理库(PIL)--Image,ImageDraw等基本模块介绍
- 2021-06-04 路由器频繁掉线 Maximum number of concurrent DNS queries reached (max: 150)
- 畅谈知识表示与知识图谱
- Thinkphp内核收卡网站源码/礼品卡回收兑换
- android 带刻度的滑动条_android 滚轮刻度尺的实现
- 我对移相器的理解(1):单bit的移相结构
- 谁在synopsys vdk里搭建过基于cortex-a55和cortex-a76的平台,并在上面成功跑过linux?
- Python 低功耗蓝牙搜索与连接
- EasyConnect - 提示获取服务端配置信息失败问题解决