如何在onNext方法调用之间进行延迟?我有一个代码:
Observable<Integer> obs = Observable.range(1, 1000)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
subs = obs.subscribe(new Subscriber<Integer>() {
@Override
public void onNext(Integer number) {
mCurrentNumber = number;
mCounter.setText(String.valueOf(number));
}
@Override
public void onCompleted() {
isRunning = false;
}
@Override
public void onError(Throwable e) {
}
});
例如,我需要设置一个100毫秒的暂停
答案 0 :(得分:1)
您可以使用interval运算符,该运算符将在指定的时间间隔后发出项目,并使用take运算符仅使用所需数量的流项目
Observable.interval(100, TimeUnit.MILLISECONDS)
.take(1000)
.subscribe(new Action1<Long>() {
@Override public void call(Long timerValue) {
}
});
答案 1 :(得分:0)
一种方法是使用zip将你的observable与Interval observable结合起来以延迟输出。
Observable.zip(Observable.range(1, 5)
.groupBy(n -> n % 5)
.flatMap(g -> g.toList()),
Observable.interval(50, TimeUnit.MILLISECONDS),
(obs, timer) -> obs)
.doOnNext(item -> {
System.out.println(System.currentTimeMillis() - timeNow);
System.out.println(item);
System.out.println(" ");
}).toList().toBlocking().first();
答案 2 :(得分:0)
如果你想1,2,3...1000
如何:
subs = Observable.interval(0, 100, TimeUnit.MILLISECONDS, Schedulers.io())
.take(1000)
.map(counter -> counter++)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<Long>() {
@Override
public void onNext(Long number) {
mCurrentNumber = number;
mCounter.setText(String.valueOf(number));
}
@Override
public void onCompleted() {
isRunning = false;
}
@Override
public void onError(Throwable e) {
}
});
0L, 1L, 2L......infinity
。 .take(1000)
将获取前1000个项目,然后停止(完成).map(counter -> counter++)
会将上述内容转换为1L, 2L,......infinity
,因为您在示例中请求的是1到1000而不是0到1000。如果您想要100,200,300,请使用.map(counter -> counter*100)
如果你想每100毫秒“采样”一个范围,从而创建一些随机数,然后使用:
Observable.range(1, 1000)
.subscribeOn(Schedulers.io())
.sample(100, TimeUnit.MILLISECONDS)
......
//rest here