内容简介:我们在用
我们在用 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 我们从源码实现就可以看出来两者的功能。
文章到这里就全部讲述完啦,若有其他需要交流的可以留言哦~!~!
想阅读作者的更多文章,可以查看我个人博客 和公共号:
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
iOS应用逆向工程 第2版
沙梓社、吴航 / 机械工业出版社 / 2015-4-1 / 79.00
你是否曾因应用上线的第一天即遭破解而无奈苦恼,想要加以防范,却又束手无策? 你是否曾为某一应用深深折服,想要借鉴学习,却又无从下手? 你是否已不满足于public API,想要进军Cydia开发,却又求学无门? 你是否已产生“不识Apple真面目,只缘身在App Store中”的危机感,想要通过阅读来一窥这冰山一角外的整个北极,却又找不到合适的书? 你是否已经因无法跨越开发......一起来看看 《iOS应用逆向工程 第2版》 这本书的介绍吧!