上篇文章讲的def,create,just都是创建操作符,今天继续学习剩余的创建操作符
Timer
创建一个Observable,它在一个给定的延迟后发射一个特殊的值。
RxJava将这个操作符实现为timer函数。
timer返回一个Observable,它在延迟一段给定的时间后发射一个简单的数字0。
- timer(long,TimeUnit))
- timer(long,TimeUnit,Scheduler))
1s后在主线程发射一个数字0.
timerObservable = Observable.timer(1,TimeUnit.SECONDS,AndroidSchedulers.mainThread());//timer默认运行在第三方线程运行,可自己指定运行线程
Interval
RxJava将这个操作符实现为interval方法。它接受一个表示时间间隔的参数和一个表示时间单位的参数。
- Javadoc: interval(long,TimeUnit))
- Javadoc: interval(long,TimeUnit,Scheduler))
10s后以每隔500ms发射一次数字,从0开始,每次递增1.
itervalObservable = Observable.interval(10, 500, TimeUnit.MILLISECONDS, AndroidSchedulers.mainThread());
Range
创建一个发射特定整数序列的Observable
Range操作符发射一个范围内的有序整数序列,你可以指定范围的起始和长度。
RxJava将这个操作符实现为range函数,它接受两个参数,一个是范围的起始值,一个是范围的数据的数目。如果你将第二个参数设为0,将导致Observable不发射任何数据(如果设置为负数,会抛异常)。
range默认不在任何特定的调度器上执行。有一个变体可以通过可选参数指定Scheduler。
- Javadoc: range(int,int))
- Javadoc: range(int,int,Scheduler))
发射0,1,2,这3个数字。
rangeObservable = Observable.range(0, 3);
range操作符的subscriber,若不指定,默认运行在主线程。
Repeat
创建一个发射特定数据重复多次的Observable
RxJava将这个操作符实现为repeat方法。它不是创建一个Observable,而是重复发射原始Observable的数据序列,这个序列或者是无限的,或者通过repeat(n)指定重复次数。
repeat操作符默认在trampoline调度器上执行。有一个变体可以通过可选参数指定Scheduler。
- repeat()
- repeat(long)
- repeat(Scheduler))
- repeat(long,Scheduler))
将上面的rangeObservable所发射的数据,顺序重复3遍
repeatObservable = rangeObservable.repeat(3);
可以看出repeat方法不是Observable里面的静态方法,它为其他的observable添加重复属性
StartWith
若defObservable里面发射“lily”这个字符串,则startWith后变为发射“hellolily”
startWithObserver = defObserveable.startWith(Observable.just("hello"));
Empty/Never/Throw
Empty
创建一个不发射任何数据但是正常终止的Observable
Never
创建一个不发射数据也不终止的Observable
Throw
创建一个不发射数据以一个错误终止的Observable
这三个操作符生成的Observable行为非常特殊和受限。测试的时候很有用,有时候也用于结合其它的Observables,或者作为其它需要Observable的操作符的参数。
RxJava将这些操作符实现为 empty,never和error。error操作符需要一个Throwable参数,你的Observable会以此终止。这些操作符默认不在任何特定的调度器上执行,但是empty和error有一个可选参数是Scheduler,如果你传递了Scheduler参数,它们会在这个调度器上发送通知。
- Javadoc: empty())
- Javadoc: never())
- Javadoc: error(java.lang.Throwable))