在开发群里有多位同学问到了关于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网络缓存的实现思路的更多相关文章

  1. Android公共库——图片缓存 网络缓存 下拉及底部更多ListView 公共类

    Android公共库——图片缓存 网络缓存 下拉及底部更多ListView 公共类 转载自http://www.trinea.cn/android/android-common-lib/ 介绍总结的一 ...

  2. 【Java/Android性能优 7】Android公共库——图片缓存 网络缓存 下拉及底部更多ListView 公共类

    本文转自:http://www.trinea.cn/android/android-common-lib/ 介绍总结的一些android公共库,包含缓存(图片缓存.预取缓存.网络缓存).公共View( ...

  3. android 项目学习随笔六(网络缓存)

    1. 对SharePreference的封装 import android.content.Context; import android.content.SharedPreferences; /** ...

  4. 6、android 网络编程

    1.基于socket的用法 服务器端: 先启动一个服务器端的socket     ServerSocket svr = new ServerSocket(8989); 开始侦听请求 Socket s  ...

  5. Android网络编程随想录(1)

    本系列文章对整个Android网络编程进行了总结,包括基本的TCP/IP协议,HTTP协议,HTTPS协议,HttpClient,UrlConnection,一些网络通信的库到棉花糖新加入的OKHTT ...

  6. Android图片缓存之Lru算法

    前言: 上篇我们总结了Bitmap的处理,同时对比了各种处理的效率以及对内存占用大小.我们得知一个应用如果使用大量图片就会导致OOM(out of memory),那该如何处理才能近可能的降低oom发 ...

  7. Android图片缓存之初识Glide

    前言: 前面总结学习了图片的使用以及Lru算法,今天来学习一下比较优秀的图片缓存开源框架.技术本身就要不断的更迭,从最初的自己使用SoftReference实现自己的图片缓存,到后来做电商项目自己的实 ...

  8. Android网络之数据解析----使用Google Gson解析Json数据

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  9. Android网络框架Volley(体验篇)

    Volley是Google I/O 2013推出的网络通信库,在volley推出之前我们一般会选择比较成熟的第三方网络通信库,如: android-async-http retrofit okhttp ...

随机推荐

  1. linux文件删除,剩余空间没变化

    centOS6.6,删除了一个13G的文件,但是使用df -h 查看,剩余空间没变化这个文件夹查看 du -h查看发现空间已经变少了.原因可能是删除文件时有进程在使用文件,导致空间未释放.yum in ...

  2. zoj 3537 区间dp+计算几何

    题意:给定n个点的坐标,先问这些点是否能组成一个凸包,如果是凸包,问用不相交的线来切这个凸包使得凸包只由三角形组成,根据costi, j = |xi + xj| * |yi + yj| % p算切线的 ...

  3. 90. 子集 II

    90. 子集 II 题意 给定一个可能包含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: [1,2,2]输出:[ [2], [1], ...

  4. elasticsearch 亿级数据检索案例与原理

    版权说明: 本文章版权归本人及博客园共同所有,转载请标明原文出处( https://www.cnblogs.com/mikevictor07/p/10006553.html ),以下内容为个人理解,仅 ...

  5. UVALive 6885 Flowery Trails 最短路

    Flowery Trails 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid= ...

  6. java中write(byte[] b)与write(byte[] b,int off,int len)区别

    public static void copyInputStreamT0OutputStream(InputStream in, OutputStream out) { byte[] buffer = ...

  7. django源码(2.0.2)粗解之命令行执行

    前言 django的命令行在整个的django web开发中都会经常用到,而且是必须得用到.所以,能够了解下django的命令行实现其实是非常有帮助的. 如果大家比较关心django命令的详细说明和使 ...

  8. Centos安装Perforce

    Author: JinDate: 20140827System: CentOS release 6.5 (Final) 参考:http://www.cnblogs.com/itech/archive/ ...

  9. Namespace declaration statement has to be the very first statement in the script

    php 中 Namespace declaration statement has to be the very first statement in the script 错误解决方法: 在PHP文 ...

  10. Latex Error cannot determine the size of graphic 报错的解决的方法

    Latex Error cannot determine the size of graphic 报错的解决的方法 插入jpg文件老是会报错... 追究了半天,原来是编译的命令又问题,不应该使用 la ...