Android网络缓存的实现思路

来源:互联网 发布:ug10.0加工编程铣平面 编辑:程序博客网 时间:2024/05/16 13:02

在开发群里有多位同学问到了关于Android中网络缓存的问题,其实无论是Android还是iOS,缓存的大致思路都是相同的,下面就几种情况下的缓存做一个大致的介绍,顺便说一下有些开源的网络请求框架已经提供了对缓存的支持,例如现在比较流行的okhttp。可是有的时候我们希望利用Android自带的网络请求api并且实现自己的网络缓存策略,自己实现会更加灵活,更符合自己的 业务逻辑需求。

我把网络缓存大致先分为两种:

1、网络数据刷新不频繁的

在此种情况下网络数据数据的频率并不是很高,并且对数据的实时显示要求也不是很高,例如一些电商平台的商品显示列表数据。在这种情况下,数据比如每过1个小时才刷新一次,这样我们就没必要每次都去从网络上请求数据,可给数据设置一个超时值,当然这个超时值应该小于数据刷新的时间,例如如果数据刷新是1小时一次,那么我们可以把缓存的超时值设置成30分钟,10分钟,或者5分钟。这样就会既可以保证数据的快速显示又不会影响用户获得最新的数据。在这种情况下的业务逻辑如下:

if(网络可用){if(本地存在对应缓存&&缓存没有过期&&非刷新操作){返回本地;}else{进行网络请求;存储网络数据到本地;//(可以使用文件或sqllite)返回网络数据;}}else{if(刷新操作){提示无网络状态下刷新操作不可用;}else{if(本地存在对应缓存){返回本地缓存}else{返回空;}}}

2、网络数据刷新较频繁的

如果网络数据刷新较为频繁,比如贴吧,说说什么的。就不能用上面所说的缓存机制,因为这种对数据的实时性要求比较高,这种情况下所需要的缓存机制也仅仅是稍微改善一下用户的使用体验,让用户刚刚进来的时候有内容可以看。这种情况下的缓存逻辑如下:

if(网络可用){if(本地存在对应缓存){在界面中先设置本地数据;}发出网络请求。网络请求数据存储到本地。等网络请求结束用新的数据刷新界面。}else{if(本地存在对应缓存){在界面中设置本地数据;}else{界面中提示没有数据,或者网络不可用。}}

以上就是较为常用的网络缓存的两种实现思路。另外要说明的就是把网络数据存储到本地的具体技术,可以使用sqllite进行存储,也可以使用文件进行存储,如果使用文件存储建议建立一个文件夹,并且以每个url对应的hashcode码为文件名,这样存储比较清晰,并且计算超时值时可以直接用当前时间减去文件的修改时间就可以了,如果是用sqllite数据库存储,存储的时候应该存储对应的url,时间戳,和内容。

如有不妥欢迎拍砖。


2 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淮南住房公积金查询个人账户 毕节住房公积金查询 邯郸市住房公积金管理中心 渭南市住房公积金管理中心 连云港住房公积金 临沂住房公积金查询个人账户 南充住房公积金 住房公积金密码 运城住房公积金查询 住房公积金查询电话 住房公积金热线 昆明市住房公积金管理中心 乌鲁木齐住房公积金查询 玉林市住房公积金管理中心 南宁住房公积金网 宜宾市住房公积金管理中心 重庆住房公积金 银川住房公积金查询个人账户 洛阳住房公积金查询 住房公积金卡 东莞住房公积金查询 南京住房公积金管理中心 成都住房公积金 广西住房公积金查询 广西区直住房公积金查询入口 哈尔滨住房公积金管理中心 武汉住房公积金查询个人账户 重庆市住房公积金管理中心 渭南住房公积金查询 咸阳市住房公积金管理中心 宁德住房公积金查询 苏州住房公积金管理中心 太原住房公积金 萍乡市住房公积金个人查询 深圳住房公积金查询余额 长春市住房公积金网 潍坊市住房公积金管理中心 阜阳市住房公积金查询 赣州住房公积金 太原住房公积金查询个人账户 郑州市住房公积金查询