RxJava2 中常用操作符和Subject常用子类说明

2020-11-17  本文已影响0人  ITRenj

RxJava2 中常用操作符和Subject常用子类代码练习及说明。
ReactiveX 系列所有操作符以及RxJava2与RxJava1的操作符变化可查看 ReactiveX 操作符

示例代码下载地址 GitHub下载


(一)项目中主要包含的操作符展示

创建操作符

变换操作符

过滤操作符

组合操作符

错误处理操作符

辅助操作符

条件和布尔操作符

算术和聚合操作符

连接操作符

什么是可连接的 Observable(Connectable Observable):

可连接的 Observable 是一种特殊的 Observable 对象,并不是 订阅(Subscrib) 的时候就发射数据,而是只有对其调用 connect() 操作符的时候才开始发射数据,所以可以用来更灵活的控制数据发射的时机。

转换操作符


(二)Subject常用子类说明

AsyncSubject 类

使用AsyncSubject无论输入多少参数,永远只输出最后一个参数

① 一定要用Subcect.create()的方式创建并使用,不要用just(T)、from(T)、create(T)创建,否则会导致失效
② 如果因为发生了错误而终止,AsyncSubject 将不会发射任何数据,只是简单的向前传递这个错误通知

BehaviorSubject类

发送离订阅最近的上一个值,没有上一个值的时候会发送默认值

① 一定要用Subcect.create()的方式创建并使用,不要用just(T)、from(T)、create(T)创建,否则会导致失效
② 如果遇到错误程序会直接中断

PublishSubject

从哪里订阅就从哪里开始发送数据,与ReplaySubject 类做比较

① 一定要用Subcect.create()的方式创建并使用,不要用just(T)、from(T)、create(T)创建,否则会导致失效
② 遇到错误,如果重写些错误回调,向前传递这个错误通知,没有写错误回调的话,程序将直接报错,抛出异常,终止程序

ReplaySubject

无论何时订阅,都会将所有历史订阅内容全部发出,与 PublishSubject 类做比较

① 一定要用Subcect.create()的方式创建并使用,不要用just(T)、from(T)、create(T)创建,否则会导致失效
② 遇到错误,如果重写些错误回调,向前传递这个错误通知,没有写错误回调的话,程序将直接报错,抛出异常,终止程序

SerializedSubject

在并发情况下,不推荐使用通常的Subject对象,而是推荐使用 SerializedSubject,并发时只允许一个线程调用onNext等方法

将一个普通的 Subject 变换为 SerializedSubject 只需要调用 toSerialized() 方法即可。


(三)包含RxBus测试类

使用:

// 发送端:
RxBus.newInstance().post("aaa"); 

// 接受端:
Disposable subscribe = RxBus.newInstance().tObservable(String.class).subscribe(new Consumer () {
    @Override
    public void accept(String s) throws Exception {
        // 处理结果
        // ...
    }
}); 

// 另外需要注意在onDestroy()方法中取消订阅:
@Override
protected void onDestroy() {
    super.onDestroy();
    if (subscribe.isDisposed()) {
        subscribe.dispose();
    }
    // 如果发送了粘性事件,需要清除所有的粘性事件
    // RxBus.newInstance().clearStickyEvent();
}
上一篇 下一篇

猜你喜欢

热点阅读