GitHut 地址: https://github.com/ReactiveX/RxAndroid

build.gradle:

 compile 'io.reactivex:rxandroid:1.2.1'
compile 'io.reactivex:rxjava:1.2.2'

(1)RxJava简介:

RxJava 是一个在Java虚拟机上实现的响应式扩展库:提供了基于observable序列实现的异步调用及基于事件编程。

RxJava最核心的两个东西是Observables(被观察者,事件源)和Subscribers(观察者)。Observables发出一系列事件,Subscribers处理这些事件。

它扩展了观察者模式,支持数据、事件序列并允许你合并序列,无需关心底层的线程处理、同步、线程安全、并发数据结构和非阻塞I/O处理。

一个Observable可以发出零个或者多个事件,知道结束或者出错。每发出一个事件,就会调用它的Subscriber的onNext方法,最后调用Subscriber.onNext()或者Subscriber.onError()结束。

RxJava是由Netflix开发的反应式扩展(Reactive Extensions)的Java实现。Reactive Extensions是这样一个第三方库:它结合了可观察集合和LINQ式查询以达到异步和基于事件的编程效果

Netflix将这个库托管到了Github上,支持Java6以上的版本并且使它可以用于Android App开发。

它支持Java5及更高版本,并支持其他一些基于JVM的语言,如Groovy、Clojure和Scala。

我们假设你已经对RxJava有一些了解。如果没有的话,强烈建议先看看这两篇 文章和Netflix在Github Wiki上的前几页。

(2)观察者模式

  1. Observable和Subscriber可以做任何事情
Observable可以是一个数据库查询,Subscriber用来显示查询结果;Observable可以是屏幕上的点击事件,Subscriber用来响应点击事件;Observable可以是一个网络请求,Subscriber用来显示请求结果。

  2. Observable和Subscriber是独立于中间的变换过程的。
在Observable和Subscriber中间可以增减任何数量的map。整个系统是高度可组合的,操作数据是一个很简单的过程。

(3)实现内容

e.g.

Model类中name内容变化时,View(Activity)中Subscribers这个name的变化,同步更新Ui上的Name。
我想到的方式是
在Model中创建Obervable,在setName方法中,写入nameObservable.onNext(newName)这一行。

(ios开发有ReactiveCocoa这个框架,类似rxjava,可以监听成员变量值变化)

ReactiveCocoa是比RxJava更方便一些,RxJava一个比较好的解决这个问题的方法就是为view model创建一个compose subscription,可以参考这个项目 https://github.com/tehmou/rx-android-architecture

逐步学习:

深入浅出RxJava(一:基础篇)

深入浅出RxJava(二:操作符)

深入浅出RxJava三--响应式的好处

深入浅出RxJava四-在Android中使用响应式编程

注意对持有的context导致的内存泄露)解决方法,把Subscription加入到队列中进行管理,当activity关闭时,对Subscription进行清除。

如何升级到RxAndroid 1.0

Flipoard 的扔物线了,著名的开源库 MaterialEditText 作者,还是著名的 codeKK 上 Dagger 源码解析作者。

接下来再推荐一位对岸的小伙伴 yongjhih ,同样是 RxJava 的狂热爱好者,虽然不如大头鬼和扔物线著名,不过教程和代码都是相当漂亮,他的 GitHub 上有很多关于 RxJava 的 Examples 。

 
代码 LittleRx
最主要的4个类:Observable、OnSubscribe、Operator、Subscriber
接下来再推荐几个:

最新文章

  1. libevent在windows平台下通过vs进行编译
  2. web api :Action Results in Web API 2
  3. openssh/ntp/ftp漏洞
  4. Backbone1.0.0数据验证的变化
  5. 大话Git
  6. iOS开发网络篇—JSON介绍
  7. yii2 实现多表联查
  8. 调用wcf 得不到HttpWebResponse.ContentLength的长度
  9. spring.net +dapper 打造简易的DataAccess 工具类.
  10. 1027-Quicksum
  11. 阿里云服务器CentOS 5.7(64位)安装配置LAMP服务器(Apache+PHP5+MySQL)
  12. Java基础笔记-异常
  13. java代码中 路径符号的写法
  14. centos装openoffice
  15. es6语法部分浏览器支持引发的坑
  16. HMM基础
  17. Docker 自定义网桥
  18. [LeetCode] Fibonacci Number 斐波那契数字
  19. Windows平台下载、安装、配置Apache全攻略
  20. Java处理对象

热门文章

  1. 支持向量机-完整Platt-SMO算法加速优化
  2. spring boot引入json,jsonobject,需要指定jdk15
  3. .NetCore 下开发独立的(RPL)含有界面的组件包 (六)实现业务功能
  4. python---手动实现两个有序列表的合并
  5. 一脸懵逼学习Java操作Excel之POI(Apache POI)
  6. ASP.NET Core Http请求的处理流程
  7. HDU 1074 Doing Homework(DP状态压缩)
  8. noip宝藏
  9. BZOJ4456/UOJ#184[Zjoi2016]旅行者 分治 最短路
  10. BZOJ1823 [JSOI2010]满汉全席 2-sat