timer
示例1
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");
}
};
}
复制代码
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参数来指定调度器。
示例
//延迟 5s,间隔 2s,发送无限增长的 Long 型数列
Observable.interval(5,2,TimeUnit.SECONDS)
.subscribe(myObserver());
复制代码
08-26 16:29:45.407 13381-13381/com.zwb.rxjavademo I/System.out: onSubscribe
//延时了5s执行,间隔是2s
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有四个重载方法:
// 延时和间隔都是 period
public static Observable<Long> interval(long period, TimeUnit unit)
// 延时initialDelay,间隔 period
public static Observable<Long> interval(long initialDelay, long period, TimeUnit unit)
// 延时和间隔都是 period,指定Scheduler
public static Observable<Long> interval(long period, TimeUnit unit, Scheduler scheduler)
// 延时initialDelay,间隔 period,指定Scheduler
public static Observable<Long> interval(long initialDelay, long period, TimeUnit unit, Scheduler scheduler)
复制代码
range 和 rangeLong
Range操作符发射一个范围内的有序整数序列,你可以指定范围的起始和长度。
RxJava将这个操作符实现为range函数,它接受两个参数,一个是范围的起始值,一个是范围的数据的数目。如果你将第二个参数设为0,将导致Observable不发射任何数据(如果设置为负数,会抛异常)。
range默认不在任何特定的调度器上执行。有一个变体可以通过可选参数指定Scheduler。
示例
// 从 2 开始发送 5 个数据,区间为 [2,7)
Observable.rangeLong(2,5)
.subscribe(myObserver());
复制代码
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相同
示例
// 延迟 2s, 间隔 1s,从 2 开始发送 5 个数据
Observable.intervalRange(2,5,2,1,TimeUnit.SECONDS)
.subscribe(myObserver());
复制代码
08-26 17:22:46.587 14314-14314/com.zwb.rxjavademo I/System.out: onSubscribe
//延时了2s执行,间隔是1s
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
复制代码
分析
欢迎转载,但是请注明出处
示例源码
个人Github主页
如果对您有帮助,您可以 "Star" 支持一下哦, 谢谢! ^^