ReactiveX
ReactiveX 是一个用于异步编程的 API 规范。 ReactiveX 结合了 Observer 模式、Iterator 模式和函数式编程的最佳理念。
ReactiveX 带来了更好的代码基础:
- Functional, 函数式:避免了复杂的有状态的程序,在可观察流上使用干净(无副作用)的 输入/输出 函数。
- Less is more, 少即是多:ReactiveX 的操作子通常把精心制作的修改简化为几行代码。
- Async error handling, 异步错误处理:传统的 try/catch 对于异步计算的错误非常乏力,但 ReactiveX 具有恰当的机制来处理错误。
- Concurrency made easy, 更容易的并发:ReactiveX 的 Observables 和 Schedulers 允许程序员从底层的线程、同步和并发问题中抽象出来。
RxJava
RxJava 是 ReactiveX 在 Java 编程语言里的一个实现。
基本概念:
- 事件:主题生成的、订阅者感兴趣的东西。
- 订阅者:Observer,抽象基类是
Subscriber
。 - 主题:被观察的对象,抽象基类是
Observable
。每个主题都有一个OnSubscribe
的实例,OnSubscribe
从类名看是对订阅行为的反应,其call(Subscriber subscriber)
方法封装了事件发生、通知的逻辑,供每次订阅时调用。 -
订阅:subscribe,是一种动作,RxJava 在订阅时建立主题与监听者的关系,每次订阅,主题都会调用其内部
OnSubscribe.call(Subscriber subscriber)
方法。 -
对于
Observable.doOnNext/doOnCompleted/doOnError/doOnEach/map
这类中间操作,生成一个新的订阅者Subscriber
,封装了相关行为,用于添加新的逻辑,并代理了对之前订阅者的调用;用新的订阅者和当前主题创建新的主题并返回。(采用的是包装器模式)
继续阅读