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