Android构建二级缓存机制

所谓二级缓存机制,即当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")

你可能感兴趣的:(Android构建二级缓存机制)