RxJava操作符(9)-连接
来源:互联网 发布:ubuntu tar 编辑:程序博客网 时间:2024/05/18 01:48
Connect
Publish操作符将原有的Observable转化为ConnectableObservable,ConnectableObservable在被订阅的时候不会发射数据,而是在调用Connect操作符时才发射数据。Connect操作符会生成Subscription对象,如果想终止数据的发射,调用unsubscribe即可。如果一个Observable没有订阅着订阅它,可以使用Connect操作符让Observable
发射数据。
发射数据。
原理图如下:
Connect操作符使用如下:
private Action1<Long> mAction1; private Action1<Long> mAction2; @Override protected void createObservable() { super.createObservable(); isConnect = true; createAction1(); createAction2(); mObservable = Observable.interval(1, TimeUnit.SECONDS) .observeOn(AndroidSchedulers.mainThread()) .publish(); mObservable.subscribe(mAction1); } private void createAction1() { mAction1 = new Action1<Long>() { @Override public void call(Long integer) { displayLogcat("createAction1 call integer = " + integer); if (integer == 3) { mObservable.subscribe(mAction2); } } }; } private void createAction2() { mAction2 = new Action1<Long>() { @Override public void call(Long integer) { displayLogcat("createAction2 call integer = " + integer); } }; }
运行代码,结果如下:
RefCount
RefCount操作符是将一个ConnectableObservable转换为一个普通的Observable,并通过订阅者的订阅,将数据发送出去。
原理图如下:
RefCount操作符使用如下:
@Override protected void createObservable() { super.createObservable(); mObservable = Observable.just(1, 2, 3, 4, 5, 6, 7, 8, 9) .publish() .refCount(); }
运行代码,结果如下:
Replay
Replay操作符返回一个ConnectableObservable对象并且可以缓存其发射过的数据,这样即使有订阅者在其发射数据之后进行订阅也能收到其之前发射过的数据。不过使用Replay操作符我们最好还是限定其缓存的大小,否则缓存的数据太多了可会占用很大的一块内存。对缓存的控制可以从空间和时间两个方面来实现。
原理图如下:
Replay操作符使用如下:
private Action1<Long> mAction1; private Action1<Long> mAction2; @Override protected void createObservable() { super.createObservable(); isConnect = true; createAction1(); createAction2(); mObservable = Observable.interval(1, TimeUnit.SECONDS) .observeOn(AndroidSchedulers.mainThread()) .replay(3);// .replay(3, TimeUnit.SECONDS); mObservable.subscribe(mAction1); } private void createAction1() { mAction1 = new Action1<Long>() { @Override public void call(Long integer) { displayLogcat("createAction1 call integer = " + integer); if (integer == 3) { mObservable.subscribe(mAction2); } } }; } private void createAction2() { mAction2 = new Action1<Long>() { @Override public void call(Long integer) { displayLogcat("createAction2 call integer = " + integer); } }; }
运行代码,结果如下:
接下来就是鸣谢了,非常感谢以下两位博主,相关链接如下:
https://mcxiaoke.gitbooks.io/rxdocs/content/operators/Connectable-Observable-Operators.html
http://mushuichuan.com/2015/12/11/rxjava-operator-9/
github地址
0 0
- RxJava操作符(9)-连接
- RxJava连接操作符
- RxJava操作符(09-算术/聚合操作&连接操作)
- [RxJava笔记]RxJava操作符
- RxJava算术聚合连接及自定义操作符
- RxJava 操作符 combineLatest
- RxJava 操作符 concat
- RxJava 操作符 interval
- RxJava 操作符 take
- RxJava操作符 reduce
- RxJava操作符学习
- RxJava defer操作符
- RXJAVA操作符
- RxJava 的操作符
- RxJava 操作符分类
- RxJava操作符
- RxJava操作符-subscribeOn
- RxJava 组合操作符
- 【学习笔记】接口
- 高性能协程库State Thread Library源代码剖析之一Makefile详解
- 飞行路线_bzoj2763_分层图+spfa
- Java集群优化——dubbo+zookeeper构建高可用分布式集群
- Javascript验证方法大全
- RxJava操作符(9)-连接
- Javascript创建对象
- 基础篇-View事件传递与绘制机制,自定义View实现理解
- Southern Subregion Problem K. Road Work
- centos6.5 nginx 安装部署配置负载均衡
- bzoj 3721 PA2014 Final Bazarek
- 实用的 html 前端组件源代码总结
- LightOJ 1092 Lighted Panels(状压+高斯消元)
- android 关机充电流程