Android网络缓存-阿里云开发者社区

开发者社区> trinea-cn> 正文

Android网络缓存

简介:
+关注继续查看

主要介绍可同步或异步获取数据、可自动根据服务器的返回头判断是否需要缓存、可自动根据请求头信息判断是否读取缓存的网络缓存
本文分为四部分包括使用示例、功能介绍、原理介绍、疑问解答。

更多 Android 网络库开源项目可见:Android 网络库

适用:网络获取内容不大的应用,尤其是api接口数据,如新浪微博、twitter的timeline、微信公众账号发送的内容等等。

示例APK可从这些地址下载:Google Play, 360手机助手, 百度手机助手, 小米应用商店, 豌豆荚

示例代码地址见HttpCacheDemo,效果图如下:

1、使用
(1)引入公共库
引入TrineaAndroidCommon@Github(欢迎star和fork^_^)作为你项目的library(如何拉取代码及添加公共库)。

(2)调用
仅需简单两步:

a. 定义缓存

Java

1

private HttpCache httpCache = new HttpCache(context);

或获取全局唯一实例HttpCache

Java

1

private HttpCache httpCache = CacheManager.getHttpCache(context);

b. 调用httpGet函数同步或异步获取网络数据

以httpGet函数异步获取数据为例,其他接口见第2部分介绍

Java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

httpCache.httpGet("http://www.trinea.cn/", new HttpCacheListener() {

protected void onPreGet() {

// do something like show progressBar before httpGet, runs on the UI thread

}

protected void onPostGet(HttpResponse httpResponse, boolean isInCache) {

// do something like show data after httpGet, runs on the UI thread

if (httpResponse != null) {

// get data success

setText(httpResponse.getResponseBody());

} else {

// get data fail

}

}

});

(3) 要求
缓存过期时间是根据服务器返回头中的cache-control和expires决定的,所以服务器需要设置这两个参数才能生效。具体可见第3部分原理介绍

2、功能介绍
(1) 几个相关类
HttpRequest 请求信息类,可设置超时时间、请求参数、UserAgent、请求属性等
HttpResponse 请求数据返回类,可获取接口内容、过期时间等。
HttpCacheListener 请求回调接口,onPreGet方法会在请求前执行,onPostGet方法会在请求结束后执行,两个方法都运行在UI线程

(2) 构造函数
目前的构造函数仅有一个,后面增加二级缓存可能会添加另外的构造函数
public HttpCache(Context context)

(3) 异步获取网络数据
public void httpGet(String url, HttpCacheListener listener)
根据url获取数据,获取前自动调用listener的onPreGet方法,获取后自动调用listener的onPostGet方法

public void httpGet(HttpRequest request, HttpCacheListener listener)
根据request获取数据,获取前自动调用listener的onPreGet方法,获取后自动调用listener的onPostGet方法

(4) 同步获取网络数据
public String httpGetString(String url)
根据url获取数据,网络错误返回null,否则返回数据为string

public HttpResponse httpGet(String url)
根据url获取数据,网络错误返回null,否则返回数据以HttpResponse.getResponseBody()获取

public HttpResponse httpGetString(HttpRequest httpRequest)
根据request获取数据,网络错误返回null,否则返回数据为string

public HttpResponse httpGet(HttpRequest request)
根据request获取数据,网络错误返回null,否则返回数据为string

(5) 其他
public boolean containsKey(String url) 判断某个url是否已经在缓存中并且有效

public void clear() 清空缓存

3、原理介绍
遵循Http/1.1 rfc2616规范,根据服务器Response Header中的Cache-Control字段的max-age确定缓存时间,如果不存在就取Response Header中的Expires做为缓存过期时间,如示例demo中的

http://www.trinea.cn/test-for-http-cache.html

用chrome查看截图如下:

4、疑问解答
(1) 缓存时间是多少或为什么我的url始终不缓存
缓存时间是根据服务器的返回时间决定的,详见上面第3部分原理介绍

(2) 如果某次请求不想使用缓存数据或返回数据不想被缓存怎么办
a. 某次请求不想使用缓存
在调用httpGet方法时设置入参HttpRequest,如下:
request.setRequestProperty(“cache-control”, “no-cache”);

b. 某次请求返回数据不想被缓存
在调用httpGet方法时设置入参HttpRequest,如下:
request.setRequestProperty(“cache-control”, “no-store”);

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Android网络收集和ping封装库
Android网络收集和ping封装库
290 0
xamarin android网络请求总结
xamarin android中网络请求的框架非常多,在项目中使用的是第三方的一个网络请求框架restsharp,应该是github上.net网络请求最多star的框架,没有之一。这里就简单汇总了其他的一些网络请求的例子,主要还是分为android和.net两种平台。
1672 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
3956 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
5672 0
Android系统应用信息中存储和缓存的计算方法
进行如下操作: 设置->应用->选择一个应用->应用信息 会到达如下界面: 可以看到这个应用占用的磁盘空间。 先说结果,这几项会计算哪些文件(夹)。
770 0
Android监听手机网络变化
Android监听手机网络变化 手机网络状态发生变化会发送广播,利用广播接收者,监听手机网络变化 效果图 注册广播接收者 …… ...
580 0
Android OkHttp与物理存储介质缓存:DiskLruCache(2)
 Android OkHttp与物理存储介质缓存:DiskLruCache(2) 本文在附录文章8,9的基础之上,把Android OkHttp与DiskLruCache相结合,综合此两项技术,实现基于OkHttp的物理存储介质缓存DiskLruCache。
820 0
+关注
trinea-cn
www.trinea.cn
78
文章
6
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载