Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1536241
  • 博文数量: 113
  • 博客积分: 3526
  • 博客等级: 中校
  • 技术积分: 1815
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-08 09:46
个人简介

记录总结自己的工作

文章分类

全部博文(113)

文章存档

2015年(19)

2014年(10)

2013年(6)

2012年(16)

2011年(24)

2010年(21)

2009年(17)

分类: Android平台

2015-08-04 09:37:38

    目前在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对象:
    点击(此处)折叠或打开
  1. Observable<Data> memory = ...;
  2. Observable<Data> disk = ...;
  3. Observable<Data> network = ...;
   
     然后将这三个对象给组合起来,并设置选择条件,Rxjava就会依照条件依次去加载了

点击(此处)折叠或打开

  1. Observable<Data> source = Observable.concat(
  2.             sources.memory(),
  3.             sources.disk(),
  4.             sources.network()
  5.     )
  6.             .first(data -> data != null && data.isUpToDate());

    代码在github上: />
    这仅仅是一个演示的demo,要实现具体的三级缓存效果请见下一篇文章:
http://blog.chinaunix.net/uid-20771867-id-5182551.html
    
阅读(7137) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~