最近在看rxjava2 操作符,做点笔记方便以后忘记了可以快速理解。
rxjava 2中 observable 为发布者,即被观察者,observer为订阅者,即观察者。
如下图例子中:发送两条数据,通过日志查看各个操作符的调用顺序。
Observable.create(new ObservableOnSubscribe<Object>() {
@Override
public void subscribe(ObservableEmitter<Object> emitter) throws Exception {
System.out.println("发送数据::::"+1);
emitter.onNext(1);
System.out.println("发送数据::::"+2);
emitter.onNext(2);
System.out.println("结束发送::::");
}
}).doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
System.out.println("初始化::::doOnSubscribe");
}
}).doOnNext(new Consumer<Object>() {
@Override
public void accept(Object o) throws Exception {
System.out.println("初始化::::doOnNext");
}
}).subscribe(new Observer<Object>() {
@Override
public void onSubscribe(Disposable d) {
System.out.println("初始化::::onSubscribe");
}
@Override
public void onNext(Object o) {
System.out.println("结果为::::"+o);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
System.out.println("onComplete::::");
}
});
日志如下:
如何我们将 发送数据代码注释掉之后,再次查看打印日志:
可以发现,doOnSubscribe 操作符为发布者初始化的时候的回调,是在发布事件之前回调的。
onSubscribe 是订阅者也就是观察者初始化时候的回调,这个时候是在订阅事件之前发生的。
doOnNext 是在发布者发布之后,订阅者订阅之前发生的,是观察者进行的一些操作。