仿okhttp缓存策略的数据缓存

本文介绍如何在项目中实际应用OkHttp的缓存策略,包括缓存时效性判断及缓存更新机制。通过整合缓存逻辑,实现高效的数据获取流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前在面试中经常被问到看过哪些优秀的源码,吧啦吧啦说一大堆,问学到了哪些东西,吧啦吧啦又说一大堆,但是其实都是纸上谈兵,并未结合到项目中。比如说okhttp的缓存策略,okhttp的缓存做的还是不错的,有缓存没有过期就直接用,有缓存过期了先用过期的,然后再联网保存,没有缓存再去联网请求,之前也写过应付面试系列之okhttp源码简介,奉上链接http://blog.youkuaiyun.com/carryqiang/article/details/78841254

自己都觉得有点过分,很纯粹的是为了应付面试,如今整合到自己的项目中,其实这个逻辑非常简单。

以首页内容为例,首页往往是一个项目的精华所在,各种分类型lisetView,分类型RecyclerView,大量的集合数据,所以缓存还是非常重要的。代码逻辑如下

首先简单封装一下从后台得到的json,毕竟缓存是有时效性


public class RecommendCache extends DataSupport implements Serializable{
    private String jsonStr;
    private long time;
    public String getJsonStr() {
        return jsonStr;
    }

    public void setJsonStr(String jsonStr) {
        this.jsonStr = jsonStr;
    }

    public long getTime() {
        return time;
    }

    public void setTime(long time) {
        this.time = time;
    }
}
核心的缓存逻辑

RecommendCache cache = LitePalUtils.getInstance().getRecommendCache();
        
        if(cache != null && !TextUtils.isEmpty(cache.getJsonStr())) {
            Gson gson = new Gson();
            RecommendResponse cacheResponse = gson.fromJson(cache.getJsonStr(), RecommendResponse.class);
            //有缓存的情况
            if(cacheResponse != null) {
                long lastUpDate = cache.getTime();
                //缓存过期了,先用过期的,再去重新请求,自己设定时间为120秒
                if(System.currentTimeMillis() / 1000 - lastUpDate > 120) {
                    setCacheData(cacheResponse);
                    initListView(lvContent);
                } else {
                    //没过期就直接拿来用
                    setData(cacheResponse);
                }
            } else {
                //缓存数据为空,联网请求数据,请求的数据记得缓存
                initListView(lvContent);
            }

        } else {
            
            initListView(lvContent);
        }
这个LitePalUtils是数据库的操作类,用于数据的存取。initListView()方法里面封装了联网和加载数据的具体逻辑。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值