Android网络缓存的实现思路
在开发群里有多位同学问到了关于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,时间戳,和内容。
如有不妥欢迎拍砖。
Android网络缓存的实现思路的更多相关文章
- Android公共库——图片缓存 网络缓存 下拉及底部更多ListView 公共类
Android公共库——图片缓存 网络缓存 下拉及底部更多ListView 公共类 转载自http://www.trinea.cn/android/android-common-lib/ 介绍总结的一 ...
- 【Java/Android性能优 7】Android公共库——图片缓存 网络缓存 下拉及底部更多ListView 公共类
本文转自:http://www.trinea.cn/android/android-common-lib/ 介绍总结的一些android公共库,包含缓存(图片缓存.预取缓存.网络缓存).公共View( ...
- android 项目学习随笔六(网络缓存)
1. 对SharePreference的封装 import android.content.Context; import android.content.SharedPreferences; /** ...
- 6、android 网络编程
1.基于socket的用法 服务器端: 先启动一个服务器端的socket ServerSocket svr = new ServerSocket(8989); 开始侦听请求 Socket s ...
- Android网络编程随想录(1)
本系列文章对整个Android网络编程进行了总结,包括基本的TCP/IP协议,HTTP协议,HTTPS协议,HttpClient,UrlConnection,一些网络通信的库到棉花糖新加入的OKHTT ...
- Android图片缓存之Lru算法
前言: 上篇我们总结了Bitmap的处理,同时对比了各种处理的效率以及对内存占用大小.我们得知一个应用如果使用大量图片就会导致OOM(out of memory),那该如何处理才能近可能的降低oom发 ...
- Android图片缓存之初识Glide
前言: 前面总结学习了图片的使用以及Lru算法,今天来学习一下比较优秀的图片缓存开源框架.技术本身就要不断的更迭,从最初的自己使用SoftReference实现自己的图片缓存,到后来做电商项目自己的实 ...
- Android网络之数据解析----使用Google Gson解析Json数据
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Android网络框架Volley(体验篇)
Volley是Google I/O 2013推出的网络通信库,在volley推出之前我们一般会选择比较成熟的第三方网络通信库,如: android-async-http retrofit okhttp ...
随机推荐
- Linux命令学习<不断更新>
没有系统的学习过Linux命令,遇到了就学习一下,慢慢积累. 1.echo 命令,学习网站『https://linux.cn/article-3948-1.html』. echo单词有回声.共鸣的意思 ...
- 保存全局Crash报告
CrashHandler.java UncaughtException处理类,当程序发生Uncaught异常的时候,有该类来接管程序,并记录发送错误报告 package com.amanda;imp ...
- wikioi 1078 最小生成树 Kruskal算法
1078 最小生成树 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题目描述 Description 农民约翰被选为他们镇的镇长!他其中一个竞选承诺 ...
- C#高级编程9-第6章 数组
数组 1.同一类型和不同类型的多个对象 需要使用同一类型的多个对象则使用集合和数组. Array类为数组元素排序和过滤提供了多个方法,使用枚举器,可以迭代数组所有元素. 2.简单数组 数组的声明 因为 ...
- ASP.NET MVC 手机短信验证
本文来自于stoneniqiu的文章,原文地址 http://www.cnblogs.com/stoneniqiu/p/6234002.html 1.注册一个应用 得到AppKey 和 App Sec ...
- (转,记录用)jQuery页面加载初始化的3种方法
jQuery 页面加载初始化的方法有3种 ,页面在加载的时候都会执行脚本,应该没什么区别,主要看习惯吧,本人觉得第二种方法最好,比较简洁. 第一种: $(document).ready(functio ...
- Python学习笔记(三):随机生成函数方法
本文是在Python2下总结! Python中的random模块用于生成随机数,如果想生成随机数需要先导入random的模块然后才能使用其中的方法,下面简单介绍一下常用的结果函数方法: 1·.rand ...
- Node.js学习笔记(1) - Node.js简介
近期在看一些Node.js的知识,看完后觉得,一些前面的东西忘记了,于是整理一下,方便自己查阅,也希望对学习Node.js的朋友有些帮助: 当然以下只是我个人的观点和理解,不喜勿喷,也望大神指教. 一 ...
- Oracle中NVARCHAR2与VARCHAR2的相互转换
将NVARCHAR2转换为VARCHAR2: declare v_username varchar2(12) ; v_nm_login nvarchar2(12); begin selec ...
- GDB高级用法
http://blog.csdn.net/wwwsq/article/details/7086151