目前在Android中加载图片一般都是采用三级缓存,分别是内存、外部存储和网络,也就是说加载图片的时候依次从内存、外部存储和网络中进行加载。
在这篇文章中
http://blog.danlew.net/2015/06/22/loading-data-from-multiple-sources-with-rxjava/ 作者使用Rxjava实现了一个三级缓存,
使用RxJava实现的好处就是结构逻辑非常清晰,只要加入判断条件Rxjava就会自动依次在这三级中加载需要的数据,体现了Rxjava的强大之处。
同时作者还写了一个demo程序,不过是个java程序,只能通过命令行运行,不够灵活,所以我将其改进成了Android app,并添加了控制按钮,可以很容易通过log查看其加载情况。
其实现原理就是首先创建三个缓存的Observable对象:
点击(此处)折叠或打开
-
Observable<Data> memory = ...;
-
Observable<Data> disk = ...;
-
Observable<Data> network = ...;
然后将这三个对象给组合起来,并设置选择条件,Rxjava就会依照条件依次去加载了
-
Observable<Data> source = Observable.concat(
-
sources.memory(),
-
sources.disk(),
-
sources.network()
-
)
-
.first(data -> data != null && data.isUpToDate());
代码在github上:
/>
这仅仅是一个演示的demo,要实现具体的三级缓存效果请见下一篇文章:http://blog.chinaunix.net/uid-20771867-id-5182551.html
阅读(7288) | 评论(0) | 转发(0) |