RxCache原理分析

本文详细分析了RxCache的缓存方案,从初始化、动态代理到核心的缓存策略,包括内存和磁盘存储。通过注解定义接口方法,借助动态代理实现接口的具体实现。缓存策略主要在TwoLayersCache类中,包括删除、获取和保存数据的三个关键操作。文章还探讨了数据的获取流程,涉及网络加载和Retrofit的结合使用。
摘要由CSDN通过智能技术生成

RxCache配合retrofit使用的缓存方案

首先看一下rxcache的官方demo

/**
 * 此为RxCache官方Demo
 */
public interface CacheProviders {

    @LifeCache(duration = 2, timeUnit = TimeUnit.MINUTES)
    Observable<Reply<List<Repo>>> getRepos(Observable<List<Repo>> oRepos, DynamicKey userName, EvictDynamicKey evictDynamicKey);

    @LifeCache(duration = 2, timeUnit = TimeUnit.MINUTES)
    Observable<Reply<List<User>>> getUsers(Observable<List<User>> oUsers, DynamicKey idLastUserQueried, EvictProvider evictProvider);

    Observable<Reply<User>> getCurrentUser(Observable<User> oUser, EvictProvider evictProvider);
}

接下来我们看一下RxCache的初始化

 CacheProviders cacheProviders = new RxCache.Builder()
                .persistence(cacheDir, new GsonSpeaker())
                .using(CacheProviders.class);

关于rxache的一些基本使用请参考下文
https://www.jianshu.com/p/b58ef6b0624b

进入源码之前我们首先思考一下这么几个问题,
1,通过上面的例子我们可以看出rxchace通过注解的方式定义了接口方法,那么它是在什么地方具体实现的
2,既然是缓存,它都有哪些缓存策略

接下来我们进入RxCache类的using方法看下这个方法都干了些什么
下面看下源码

  public <T> T using(final Class<T> classProviders) {
    proxyProviders = new ProxyProviders(builder, classProviders);

    return (T) Proxy.newProxyInstance(
        classProviders.getClassLoader(),
        new Class<?>[] {classProviders},
        proxyProviders);
  }

从这里我们可以看出,这里是通过动态代理的方式,返回了一个执行对象,这个对象就是传入的接口的具体实现类。关于不了解动态代码机制的自行研究学习

接下来,我们进入ProxyProviders,ProxyProviders继承InvocationHandler,这个类是动态代理的关键类,主要方法是invoke,进入ivoke方法

 @Override public Object invoke(final Object proxy, final Method method, final Object[] args)
      throws Throwable {
    return Observable.defer(new Callable<ObservableSource<?>>() {
      @Override public ObservableSource<?> call() throws Exception {
        Observable observable = proce
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值