Rxjava2 - timer/interval/range/intervalRange示例和详细解析
timer
示例1
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| Observable.timer(5, TimeUnit.SECONDS) .subscribe(myObserver());
private Observer<? super Long> myObserver() { return new Observer<Long>() { @Override public void onSubscribe(Disposable d) { System.out.println("onSubscribe"); }
@Override public void onNext(Long aLong) { System.out.println("接收----->" + aLong); }
@Override public void onError(Throwable e) {
}
@Override public void onComplete() { System.out.println("onComplete"); } }; }
|
1 2 3
| 08-26 15:37:06.813 12178-12178/com.zwb.rxjavademo I/System.out: onSubscribe 08-26 15:37:11.817 12178-12208/com.zwb.rxjavademo I/System.out: 接收----->0 08-26 15:37:11.817 12178-12208/com.zwb.rxjavademo I/System.out: onComplete
|
分析
返回一个Observable,它在延迟一段给定的时间(5s)后发射一个简单的数字0。
操作符默认在computation调度器上执行。有一个变体可以通过可选参数指定Scheduler。
比如指定在newThread线程:
Observable.timer(5, TimeUnit.SECONDS, Schedulers.newThread())
interval
Interval操作符返回一个Observable,它按固定的时间间隔(2s)发射一个无限递增的整数序列。
interval默认在computation调度器上执行。你也可以传递一个可选的Scheduler参数来指定调度器。
示例
1 2 3
| Observable.interval(5,2,TimeUnit.SECONDS) .subscribe(myObserver());
|
1 2 3 4 5 6 7 8 9
| 08-26 16:29:45.407 13381-13381/com.zwb.rxjavademo I/System.out: onSubscribe
08-26 16:29:50.410 13381-13410/com.zwb.rxjavademo I/System.out: 接收----->0 08-26 16:29:52.411 13381-13410/com.zwb.rxjavademo I/System.out: 接收----->1 08-26 16:29:54.411 13381-13410/com.zwb.rxjavademo I/System.out: 接收----->2 08-26 16:29:56.410 13381-13410/com.zwb.rxjavademo I/System.out: 接收----->3 08-26 16:29:58.410 13381-13410/com.zwb.rxjavademo I/System.out: 接收----->4 08-26 16:30:00.411 13381-13410/com.zwb.rxjavademo I/System.out: 接收----->5 ......
|
分析
interval有四个重载方法:
1 2 3 4 5 6 7 8
| public static Observable<Long> interval(long period, TimeUnit unit)
public static Observable<Long> interval(long initialDelay, long period, TimeUnit unit)
public static Observable<Long> interval(long period, TimeUnit unit, Scheduler scheduler)
public static Observable<Long> interval(long initialDelay, long period, TimeUnit unit, Scheduler scheduler)
|
range 和 rangeLong
Range操作符发射一个范围内的有序整数序列,你可以指定范围的起始和长度。
RxJava将这个操作符实现为range函数,它接受两个参数,一个是范围的起始值,一个是范围的数据的数目。如果你将第二个参数设为0,将导致Observable不发射任何数据(如果设置为负数,会抛异常)。
range默认不在任何特定的调度器上执行。有一个变体可以通过可选参数指定Scheduler。
示例
1 2 3
| Observable.rangeLong(2,5) .subscribe(myObserver());
|
1 2 3 4 5 6 7
| 08-26 17:14:04.780 14035-14035/com.zwb.rxjavademo I/System.out: onSubscribe 08-26 17:14:04.780 14035-14035/com.zwb.rxjavademo I/System.out: 接收----->2 08-26 17:14:04.780 14035-14035/com.zwb.rxjavademo I/System.out: 接收----->3 08-26 17:14:04.780 14035-14035/com.zwb.rxjavademo I/System.out: 接收----->4 08-26 17:14:04.780 14035-14035/com.zwb.rxjavademo I/System.out: 接收----->5 08-26 17:14:04.780 14035-14035/com.zwb.rxjavademo I/System.out: 接收----->6 08-26 17:14:04.780 14035-14035/com.zwb.rxjavademo I/System.out: onComplete
|
分析
intervalRange
intervalRange 可以指定发送事件的开始值和数量,用法和interval相同
示例
1 2 3
| Observable.intervalRange(2,5,2,1,TimeUnit.SECONDS) .subscribe(myObserver());
|
1 2 3 4 5 6 7 8
| 08-26 17:22:46.587 14314-14314/com.zwb.rxjavademo I/System.out: onSubscribe
08-26 17:22:48.589 14314-14348/com.zwb.rxjavademo I/System.out: 接收----->2 08-26 17:22:49.589 14314-14348/com.zwb.rxjavademo I/System.out: 接收----->3 08-26 17:22:50.589 14314-14348/com.zwb.rxjavademo I/System.out: 接收----->4 08-26 17:22:51.589 14314-14348/com.zwb.rxjavademo I/System.out: 接收----->5 08-26 17:22:52.588 14314-14348/com.zwb.rxjavademo I/System.out: 接收----->6 08-26 17:22:52.588 14314-14348/com.zwb.rxjavademo I/System.out: onComplete
|
分析