前言
Linus Benedict Torvalds : RTFSC – Read The Funning Source Code
概括
RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programs by using observable sequences.
RxJava 是一个被设计实现为灵活扩展功能的 java 虚拟机:一个由异步和事件组成的观测序列为基础的程序库。It extends the observer pattern to support sequences of data/events and adds operators that allow you to compose sequences together declaratively while abstracting away concerns about things like low-level threading, synchronization, thread-safety and concurrent data structures.
它扩展了观察者模式来支持data/events序列和增加了operators来允许你把序列以声明方式组成在一起并一边将关注的事情抽象化,比如低线程,同步,线程安全和并发数据结构。
RxJava 是一个响应式编程框架,采用观察者设计模式。
简单使用
Step 1:创建Observer
|
|
除了Observer,还有一个内置的Subscriber类实现了Observer的抽象类。Subscriber类对Observer类进行了扩展。
它们的实现基本上是一样的,对于区别,主要有这两点:
- onStart(): 这是 Subscriber 增加的方法。在 subscribe 刚开始,而事件还未发送之前被调用。
- unsubscribe(): 这是 Subscriber 所实现的另一个接口 Subscription 的方法,用于取消订阅。
Step 2:创建Observable
|
|
RxJava 还提供了其它快速创建事件队列的方法:
Step 3:Subscribe
|
|
Observable.subscribe(Subscriber) 的内部实现:
在接收到订阅后马上会开始发送事件。
不完整定义回调
subscribe() 还支持不完整定义的回调,RxJava 会自动根据定义创建出 Subscriber 。
使用例子
|
|
Scheduler 线程控制
在不指定线程的情况下, RxJava 遵循的是线程不变的原则,即:在哪个线程调用 subscribe(),就在哪个线程生产事件;在哪个线程生产事件,就在哪个线程消费事件。如果需要切换线程,就需要用到 Scheduler (调度器)。
|
|
- subscribeOn(): 指定 subscribe() 所发生的线程,即 Observable.OnSubscribe 被激活时所处的线程。或者叫做事件产生的线程。
- observeOn(): 指定 Subscriber 所运行在的线程。或者叫做事件消费的线程。
这段代码就是说,由 subscribeOn(Schedulers.io()) 的指定,创建的事件内容(1,2,3,4)
将由io线程发出,而由 observeOn(AndroidScheculers.mainThread()) 的指定,subscriber 数字的 Log 将发生在主线程。
进阶使用
Operators 操作符
Operators在消息发送者Observable和消息消费者Subscriber之间起到操纵消息的作用。
map 操作符
|
|
当我们在消息的过程中对消息进行转换,最简单的方法就是使用 map 操作符。
map()函数的特点是:它不一定发送和原始的Observable一样的数据类型。
flatMap 操作符
|
|
利用 flatMap 操作符可以很方便的将一个 list 的字符串分开发出来,在 faltMap 函数内的 Func1跟之前的 Action1 意思一样,并且返回值是一个新的 Observable 对象。
至于更多的操作符会在未来添加。
最后在说下RxJava 的实际使用意义
- Observable 和 Subscriber 他们本身就是一个处理事件的通用框架。
- Observable 和 Subscriber 在它们之间的一系列转换步骤是相互独立的。