android开发中怎样缓存数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android开发中怎样缓存数据相关的知识,希望对你有一定的参考价值。
写入文件上也可以,你在sd卡上创建一个文件,写入其中也是可以的,这样还可以保存好数据。如果写入缓存中也不是不行但是如果忽然关机啥的程序退出,或者有其他程序调用缓存的就可能出错,所以如果不是必须的话不要直接存入缓存中。还有就是如果数据十分小就几个字符串或数字啥的我想你也知道应该放到SharedPreferences中。 参考技术A 小数据:可以自己写 MyApplication extends Application 在MyApplication 中定义几个全局变量用来保存数据也可以用 SharedPreferences 来保存数据,简单数据直接保存,复杂对象转成json保存
大量结构话的数据使用 SQLite数据库 保存
如果是文件图片数据,只能缓存到sd卡上了 参考技术B 二级缓存工作机制
所谓二级缓存实际上并不复杂,当android端需要获得数据时比如获取网络中的图片,我们首先从内存中查找(按键查找),内存中没有的再从磁盘文件或sqlite中去查找,若磁盘中也没有才通过网络获取;当获得来自网络的数据,就以key-value对的方式先缓存到内存(一级缓存),同时缓存到文件或sqlite中(二级缓存)。注意:内存缓存会造成堆内存泄露,所有一级缓存通常要严格控制缓存的大小,一般控制在系统内存的1/4。
理解了二级缓存大家可能会有个问题网络中的数据是变化的,数据一旦放入缓存中,再取该数据就是从缓存中获得,这样岂不是不能体现数据的变化?我们在缓存数据时会设置有效时间,比如说30分钟,若超过这个时间数据就失效并释放空间,然后重新请求网络中的数据。有的童鞋就问30分钟内咋办?那好吧,我也没招了,只有下拉刷新了, 实际上这不是问题。
二级缓存的实现
如何实现二级缓存,有很多技术方案,在这里我们使用 ASimpleCache框架来给大家演示一下,通过名字就可以看出它是很容易实现的。
1、ACache介绍
ASimpleCache是一个轻量级的开源cache框架,实际上就是一个叫ACache的java类。已经在商业项目中使用,运行效果不错。
2、ACache使用
我们先做一个实现数据缓存的案例,然后再归纳一下主要的方法
编写NewsListActivity主要代码如下:
创建ACache组件
ACache acache=ACache.get(context)
或
ACache acache=ACache.get(context,max_size,max_count)
参数说明:
max_size:设置限制缓存大小,默认为50M
max_count:设置缓存数据的数量,默认不限制
设置缓存数据
acache.put(key,data,time)或acache.put(key,data)
将数据同时上存入一级缓存(内存Map)和二级缓存(文件)中
参数说明:
Key:为存入缓存的数据设置唯一标识,取数据时就根据key来获得的
Data:要存入的数据,acache支持的数据类型如图所示:
有String、可序列化的对象、字节数组、Drawable等 Time:设置缓存数据的有效时间,单位秒
从缓存中取数据
提供一系列getAsXXX()方法,如图所示。
根据不同存入数据,调用不同的方法取数据
adoquery怎样判断数据在缓存中有修改啊
ADOQry.Filtered:=false;
ADOQry.Filtered:=true;
ADOQry.FilterGroup:=fgPendingRecords ;
FilterGroup参数解释如下:
FgUnassigned 指定不使用任何的过滤器来过滤数据
fgNone 移去任何的过滤器,让所有的数据都显示出来。这也可以通过设定ADO的Filtered属性值为False来达到
fgPendingRecords 只显示被修改过但尚未更新回数据源的数据或被修改过但尚未被取消更新的数据
fgAffectedRecords只显示受到上一次更新回数据源影响的数据
fgFetchedRecords 只显示在目前更新缓存之中的数据。这些数据是在上一次
从数据源取得之后所有储存在客户端的数据
fgPredicate 只显示刚被删除的数据
fgConflictingRecords 只显示被修改过但当更新回数据源时发生错误的数据
ADOQuery.Filtered:=true;
ADOQuery.FilterGroup:=fgPendingRecords;
If ADOQuery.RecordCount=0 then 没有改动
以上是关于android开发中怎样缓存数据的主要内容,如果未能解决你的问题,请参考以下文章