Android timer with RxJava



我想实现简单的计时器,该计时器将计算每秒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()

最新更新