前言
才学RxJava的时候还是挺困惑的,感觉有特别多的对『时间』的操作符,比如timer()
、interval()
、delay()
、defer()
等等……
总之功能太强大,直接吓跑了一群初学者。身边有朋友这样跟我说:
RxJava为了省点代码,把逻辑弄这么复杂,看着都晕了,我宁愿多写点 if-else
我只能回复:用RxJava逻辑肯定是变简单了,一旦用上手了,再也离不开了。现在让我写个Thread + Handler
我都觉得麻烦。
正题
先看timer()
、interval()
、delay()
的小球图吧



timer()
这里说的是新版本的timer()
,而老版本的timer()
已经跟interval()
合并了。
timer()
:创建一个Observable
,它在一个给定的延迟后发射一个特殊的值
这里需要注意,定义里面说的是『一个』,所以有别于之前用的TimerTask
。timer()
只是用来创建一个Observable
,并延迟发送一次的操作符,timer()
并不会按周期执行。
interval()
interval()
:创建一个按固定时间间隔发射整数序列的Observable
这个比较好理解,interval()
也是用来创建Observable
的,并且也可以延迟发送。但interval()
是按周期执行的,所以可以这么认为:interval()
是一个可以指定线程的TimerTask
(威力加强版……)
delay()
delay()
:延迟一段指定的时间再发送来自Observable
的发送结果
语文没学好肯定读不懂这一段,我才看到这句话的时候也懵了……
其实delay()
的常规使用跟timer()
一致,那区别在哪呢?delay()
是用于流中的操作,跟map()
、flatMap()
的级别是一样的。而timer()
是用于创建Observable
,跟just()
、from()
的级别是一样的。
总结
timer()
:用于创建Observable
,延迟发送一次。
interval()
:用于创建Observable
,跟TimerTask
类似,用于周期性发送。
delay()
:用于事件流中,可以延迟发送事件流中的某一次发送