前言
根据Froussios英文版的学习笔记。
一、Observable.just
接受一至九个参数,返回一个按参数列表顺序发射这些数据的Observable。二、Observable.empty
只会走onCompleted方法,即不发射任何数据但是正常终止。
三、Observable.never
不发射任何数据,常用于测试。
四、Observable.error
只会走onError方法
五、Observable.defer
再看这个操作符之前,先看看这个,我们设置i的初始值为10。
Observable<Integer> justO = Observable.just(i,i);
i++;
justO.doOnNext(integer -> {
System.out.println("1--"+integer);
i++;
}).subscribe();
justO.doOnNext(integer -> System.out.println("2--"+integer))
.subscribe();
你觉得会输出什么呢?结果如下:
1--10
1--10
2--10
2--10
这是因为这个值只会在执行到just的时候获取一次。
那么defer会有何表现?
Observable<Integer> defer = Observable.defer(()->Observable.just(i,i));
i++;
defer.doOnNext(integer -> {
System.out.println("1--"+integer);
System.out.println("current i="+i);
i++;
}).subscribe();
defer.doOnNext(integer -> System.out.println("2--"+integer))
.subscribe();
输出结果如下
1--11
current i=11
1--11
current i=12
2--13
2--13
这是因为defer直到有观察者订阅时才创建Observable,并且为每个观察者创建一个新的Observable。
六、Observable.create
创建一个Observable,详情参考这里
注意:建议你在传递给create方法的函数中检查观察者的isUnsubscribed状态,以便在没有观察者的时候,让Observable停止发射数据或者做昂贵的运算。
七、Observable.range(final int start, final int count)
Observable<Integer> values = Observable.range(1, 5)//发射1,2,3,4,5。
八、Observable.interval(long initialDelay, long period, TimeUnit unit)
在等待initialDelay时间后,每隔period时间发射一次事件,并且Observer会收到从0L开始递增的值。在取消订阅之前,将一直执行。
九、Observable.timer(2, TimeUnit. SECONDS)
在等待指定的时间之后发射一个0L数据。
网友评论