RxJava学习历程(三):Rx操作符之:创建操作符

上篇文章讲的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))

你可能感兴趣的:(RxJava学习历程(三):Rx操作符之:创建操作符)