@cxm-2016
2016-11-28T09:12:03.000000Z
字数 2130
阅读 2180
RxJava学习指南
版本:2
整理:陈小默
让一个可连接的Observable开始发射数据给订阅者
可连接的Observable (connectable Observable)与普通的Observable差不多,不过它并不会在被订阅时开始发射数据,而是直到使用了Connect
操作符时才会开始。用这个方法,你可以等待所有的观察者都订阅了Observable之后再开始发射数据。
RxJava中connect
是ConnectableObservable
接口的一个方法,使用publish
操作符可以将一个普通的Observable转换为一个ConnectableObservable
。
调用ConnectableObservable
的connect
方法会让它后面的Observable开始给发射数据给订阅者。
connect
方法返回一个Subscription
对象,可以调用它的unsubscribe
方法让Observable停止发射数据给观察者。
即使没有任何订阅者订阅它,你也可以使用connect
方法让一个Observable开始发射数据(或者开始生成待发射的数据)。这样,你可以将一个"冷"的Observable变为"热"的。
将普通的Observable转换为可连接的Observable
可连接的Observable (connectable Observable)与普通的Observable差不多,不过它并不会在被订阅时开始发射数据,而是直到使用了Connect
操作符时才会开始。用这种方法,你可以在任何时候让一个Observable开始发射数据。
RxJava的实现为publish
。
有一个变体接受一个函数作为参数。这个函数用原始Observable发射的数据作为参数,产生一个新的数据作为ConnectableObservable
给发射,替换原位置的数据项。实质是在签名的基础上添加一个Map
操作。
让一个可连接的Observable行为像普通的Observable
可连接的Observable (connectable Observable)与普通的Observable差不多,不过它并不会在被订阅时开始发射数据,而是直到使用了Connect
操作符时才会开始。用这种方法,你可以在任何时候让一个Observable开始发射数据。
RefCount
操作符把从一个可连接的Observable连接和断开的过程自动化了。它操作一个可连接的Observable,返回一个普通的Observable。当第一个订阅者订阅这个Observable时,RefCount
连接到下层的可连接Observable。RefCount
跟踪有多少个观察者订阅它,直到最后一个观察者完成才断开与下层可连接Observable的连接。
RxJava中的实现为refCount
,还有一个操作符叫share
,它的作用等价于对一个Observable同时应用publish
和refCount
操作。
保证所有的观察者收到相同的数据序列,即使它们在Observable开始发射数据之后才订阅
可连接的Observable (connectable Observable)与普通的Observable差不多,不过它并不会在被订阅时开始发射数据,而是直到使用了Connect
操作符时才会开始。用这种方法,你可以在任何时候让一个Observable开始发射数据。
如果在将一个Observable转换为可连接的Observable之前对它使用Replay
操作符,产生的这个可连接Observable将总是发射完整的数据序列给任何未来的观察者,即使那些观察者在这个Observable开始给其它观察者发射数据之后才订阅。
RxJava的实现为replay
,它有多个接受不同参数的变体,有的可以指定replay
的最大缓存数量,有的还可以指定调度器。
有一种 replay
返回一个普通的Observable。它可以接受一个变换函数为参数,这个函数接受原始Observable发射的数据项为参数,返回结果Observable要发射的一项数据。因此,这个操作符其实是replay
变换之后的数据项。