我想实现简单的计时器,该计时器将计算每秒1到30的值。当它到达30时,我希望它停止。现在我有这样的东西,但是我不知道如何在30秒后停止它。
这是代码:
Observable<Long> observable = Observable.interval(1, TimeUnit.SECONDS);
observable.subscribe(
new Action1<Long>() {
@Override
public void call(Long aLong) {
Log.d("Observable timer: ", aLong.toString());
}
},
new Action1<Throwable>() {
@Override
public void call(Throwable error) {
System.out.println("Error encountered: " + error.getMessage());
}
},
new Action0() {
@Override
public void call() {
System.out.println("Sequence complete");
}
}
);
您想计数一次吗?
Observable.interval(1, TimeUnit.SECONDS)
.take(30) // up to 30 items
.map(v -> v + 1) // shift it to 1 .. 30
.subscribe(System.out::println);
Thread.sleep(35000);
从1到30反复计数?
Observable.interval(1, TimeUnit.SECONDS)
.map(v -> (v % 30) + 1) // shift it to 1 .. 30
.subscribe(System.out::println);
Thread.sleep(91000);
您可以这样实现:
public static final int TIMER_VALUE = 30;
....
Observable.interval(1, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
.doOnNext(new Consumer<Long>() {
public void accept(Long x) throws Exception {
// update your view here
myTextView.setText(String.valueOf(x));
}
})
.takeUntil(aLong -> aLong == TIMER_VALUE)
.doOnComplete(() ->
// do whatever you need on complete
).subscribe()