do操作符可以给Observable的生命周期的各个阶段加上一系列的回调监听,当Observable执行到这个阶段时,这些回调就会被触发。
| 操作符 | 用途 |
|---|---|
| doOnSubscribe | 一旦观察者订阅了Observable,它就会被调用 |
| doOnLifecycle | 可以在观察者订阅后,设置是否取消订阅 |
| doOnNext | 它产生的Observable每发射一型数据就回调它一次,它的Consumer接受发射的数据项。一般用于在subscribe之前对数据进行处理 |
| doOnEach | 它产生Observable每发射一项数据就会调用它一次,不仅包括onNext,还包括onError和onCompleted |
| doAfterNext | 在onNext之后执行,而doOnNext()``在onNext之前执行 |
| doOnComplete | 当它产生Observable在正常终止调用onComplete时会被调用 |
| doFinally | 在它产生的Observable终止之后会被调用,无论是正常终止还是异常终止。doFinally优先于doAfterTerminate的调用 |
| doAfterTerminate | 注册一个Action,当Observable调用onComplete或onError时触发 |
具体的例子:
Observable.just("Hello World")
.doOnNext(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
System.out.println("doOnNext: " + s);
}
})
.doAfterNext(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
System.out.println("doAfterNext: " + s);
}
})
.doOnComplete(new Action() {
@Override
public void run() throws Exception {
System.out.println("doOnComplete: ");
}
})
//订阅之后回调的方法
.doOnSubscribe(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
System.out.println("doOnSubscribe: ");
}
})
.doAfterTerminate(new Action() {
@Override
public void run() throws Exception {
System.out.println("doAfterTerminate: ");
}
})
.doFinally(new Action() {
@Override
public void run() throws Exception {
System.out.println("doFinally: ");
}
})
//Observable 每发射一个数据就会触发这个回调,不仅包括onNext,还包括onError和onCompleted
.doOnEach(new Consumer<Notification<String>>() {
@Override
public void accept(Notification<String> stringNotification) throws Exception {
System.out.println("doOnEach: " + (stringNotification.isOnNext() ?
"OnNext" : stringNotification.isOnComplete() ? "onComplete:" : "onError"));
}
})
//订阅后可以取消订阅
.doOnLifecycle(new Consumer<Disposable>() {
@Override
public void accept(Disposable disposable) throws Exception {
System.out.println("doOnLifecycle: " + disposable.isDisposed());
}
}, new Action() {
@Override
public void run() throws Exception {
System.out.println("doOnLifecycle run: ");
}
})
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
System.out.println("收到消息: " + s);
}
});
内容来源于:RxJava 2.x实战(沈哲著)