内容简介:我们在用
我们在用 RxJava 的时候,如果需要在某个地方需要中断事件流,那么直接返回一个 Observable.empty() ,与它有类似功能的有 Observable.never 。
Observable.just(1,2,3,4,5)
.flatMap((Func1<Integer, Observable<Object>>) integer -> {
if (integer > 3) {
return Observable.empty();
//return Observable.never();
} else {
return Observable.just(integer);
}
})
.subscribe(new Subscriber<Object>() {
@Override
public void onCompleted() {
System.out.println("onCompleted");
}
@Override
public void onError(Throwable e) {
System.out.println("onError");
}
@Override
public void onNext(Object o) {
System.out.println("onNext");
System.out.println(Integer.valueOf(o.toString()));
}
});
Observable.never 的输出结果:
onNext 1 onNext 2 onNext 3
Observable.empty 的输出结果:
onNext 1 onNext 2 onNext 3 onCompleted
从结果可以看出来, Observable.empty 会执行 订阅者 的 onCompleted 方法, 而 Observable.never 方法则是立即终止整个流程。
源码分析(RxJava1.3.0):
public class Observable<T> {
public static <T> Observable<T> never() {
return NeverObservableHolder.instance();
}
/***部分代码省略***/
public static <T> Observable<T> empty() {
return EmptyObservableHolder.instance();
}
}
public enum EmptyObservableHolder implements OnSubscribe<Object> {
INSTANCE;
static final Observable<Object> EMPTY = Observable.unsafeCreate(INSTANCE);
@SuppressWarnings("unchecked")
public static <T> Observable<T> instance() {
return (Observable<T>)EMPTY;
}
@Override
public void call(Subscriber<? super Object> child) {
child.onCompleted();
}
}
public enum NeverObservableHolder implements OnSubscribe<Object> {
INSTANCE;
static final Observable<Object> NEVER = Observable.unsafeCreate(INSTANCE);
@SuppressWarnings("unchecked")
public static <T> Observable<T> instance() {
return (Observable<T>)NEVER;
}
@Override
public void call(Subscriber<? super Object> child) {
// deliberately no op
}
}
Observable.empty() 和 Observable.never 我们从源码实现就可以看出来两者的功能。
文章到这里就全部讲述完啦,若有其他需要交流的可以留言哦~!~!
想阅读作者的更多文章,可以查看我个人博客 和公共号:
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
How to Build a Billion Dollar App
George Berkowski / Little, Brown Book Group / 2015-4-1 / USD 24.95
Apps have changed the way we communicate, shop, play, interact and travel and their phenomenal popularity has presented possibly the biggest business opportunity in history. In How to Build a Billi......一起来看看 《How to Build a Billion Dollar App》 这本书的介绍吧!