一、描述
将普通的Observable转换为可连接的Observable。
可连接的Observable (connectable Observable)与普通的Observable差不多,不过它并不会在被订阅时开始发射数据,而是直到使用了Connect操作符时才会开始。用这种方法,你可以在任何时候让一个Observable开始发射数据。
有一个变体接受一个函数作为参数。这个函数用原始Observable发射的数据作为参数,产生一个新的数据作为ConnectableObservable给发射,替换原位置的数据项。实质是在签名的基础上添加一个Map操作。
二、示意图
三、示例代码
1. 未使用publish
操作符时
1 | Observable observable = Observable.range(1, 1000000) |
2. 运行结果
1 | onNext1: 15281 |
可见Observable在订阅的时候就开始发射数据,导致两个观察者收到的数据是不一样的。
3. 使用publish
操作符后
1 | ConnectableObservable observable = Observable.range(1, 1000000).sample(10, TimeUnit.MILLISECONDS).publish(); |
四、运行结果
1 | onNext1: 20491 |
可见在订阅的时候,并不会开始发射数据,只有等到connect
连接后,才开始发射数据,所以两个观察者接收到的数据是一样的。
五、参考资料
PS:欢迎关注 SherlockShi 个人博客