当应用进程创建 RxCache 的实例后,会给应用进程返回一个 rxcache实例及一个 ProxyProvider,代码如下:

CacheProviders providers = new RxCache.Builder().persistence(cacheDirectory).using(CacheProviders.class);

using之前的代码返回的就是 rxcache 实例, using返回的是一个proxy实例。

这句调用会进入了rxcache的源码实现里,using的实现代码会创建一个 ProxyProviders,它是一个 InvocationHandler, 将代理执行 CacheProviders 的所有函数调用,具体代理是ProxyProviders类的invoke调用,例如外部应用程序调用CacheProviders.getDataFromUrl(),则会立即被ProxyProviders类的invoke截获,将invode的第一个参数赋值为外部发起调用的object,将invoke的第二个参数赋值为调用的函数getDataFromUrl,将invoke的第三个参数赋值为外部调用的调用参数。

创建这个 ProxyProviders 的过程中就会创建一个 ProxyTranslator,这个proxytranslator就会调用 getLifeTimeCache 从annotation初始化duration。

之后,若数据从外部获取成功,这个lifetime会被传送到TwoLayersCache的save()调用里,继而传送到SaveRecord的save调用,最后被存到持久化(lifetime一并被持久化,持久化采用的是json格式)。

获取数据的时候,会调用ProcessorProvidersBehaviour的getData,然后调用TwoLayersCache的retrieve,然后调用 RetrieveRecord 的retrieveRecord,在这个调用里,先从持久化里获取到先前保存的Record(包括先前的lifetime),但是从annotation传过来的lifetime会将Record从持久化里获取的lifetime替换掉,然后利用这个lifetime检查缓存是否过期。

我们可以将 RxCache->ProxyProviders->ProxyTranslator 的传递过程添加一个修改lifetime的接口,让外部可以定义ProxyTranslator的getLifeTimeCache函数,这样达到随时修改lifetime的目的。

最新文章

  1. 扩展BindingList,防止增加、删除项时自动更新界面而不出现“跨线程操作界面控件 corss thread operation”异常
  2. Tomcat7安装配置 for Ubuntu
  3. HTML5- Canvas入门(六)
  4. Java 超简单实现发送邮件(可动态控制发送人数)
  5. Servlet转码问题
  6. MYSQL 优化常用方法
  7. 51Nod 1378 夹克老爷的愤怒
  8. 临床试验中PI、CI、SI、COI是指哪些人?
  9. 《Xenogears》(异度装甲)隐含的原型与密码
  10. Android 学习笔记之Volley开源框架解析(四)
  11. 十条nmap常用的扫描命令
  12. 微信支付开发(1) 微信支付URL配置
  13. 【NOIP模拟赛】工资
  14. OC的类方法、对象方法和函数
  15. codeforces 653A Bear and Three Balls
  16. apache服务器参数设置
  17. struts2 404处理
  18. C# TreeView设置SelectedNode设置无效的问题
  19. 华为PAY公交卡建议开卡免费!
  20. 浅谈React16框架 - Fiber

热门文章

  1. 寄售Consignment和VMI有什么区别?
  2. JSON 之 SuperObject(6): 方法
  3. 【笨嘴拙舌WINDOWS】计时器精度
  4. Kafka中的Message Delivary机制
  5. SQL语句方法语法总结(三)
  6. 【转】strcpy溢出的攻击示例
  7. HDU2028 Lowest Common Multiple Plus
  8. JAVA虚拟机内存分配与回收机制
  9. Android 动画 6问6答
  10. devexpress GridControl 行指示列图标绘制