所谓二级缓存机制,即当Android端需要获得数据时,首先从内存中查找(按键查找),内存中没有的再从磁盘文件或sqlite中去查找,若磁盘中也没有才通过网络获取。
当获得来自网络的数据,就以key-value对的方式先缓存到内存(一级缓存),同时缓存到文件或sqlite中(二级缓存)。
内存缓存会造成堆内存泄露,所以一级缓存通常要严格控制缓存的大小。
ASimpleCache是一个轻量级的开源cache框架,作者将其简化封装成一个简单ACache的java类。
private ACache acache;
acache = ACache.get(getActivity());
JSONObject cache_List = (JSONObject) acache.getAsJSONObject("list");
if(cache_List != null) {
CHBRsp result = new CHBRsp(CHBRsp.CodeSucess, "", cache_List );
loadDataSucess(result);
} else{
onRefresh();
}
private void loadDataSucess(CHBRsp result) {
//如果下拉刷新成功请求到数据,则缓存起来
if(page == 1) {
JSONObject json = result.tryExtra(JSONObject.class);
//缓存时效性为6小时
acache.put("list", json, 60*60*6);
}
//*******
}
在一些不是非常需求时效性的展示页面,首次进入页面的时候,先寻找缓存,将其加载到页面,无需请求网络数据。当用户需要刷新的时候,可以通过下拉刷新等请求最新数据onRefresh,并将本次刷新的数据再次缓存,重置时效时间6小时。当过了时效性的时候,用户再进入本页面,将无法取得缓存数据,而直接onRefresh请求网络数据。(类似于新浪微博,离线也可以查看最后一次刷新停留的页面数据。)
//设置缓存数据,存入一二级缓存,可以设置时效
acache.put(key,data,time)或acache.put(key,data)
//取出对应数据,比如JSONObject等
acache.getAsJSONObject("list")
网友评论