web-dev-qa-db-ja.com

永久に繰り返され、いつでも再起動および停止できるRxJavaタイマー

In Android iタイマーを使用して、5秒ごとに繰り返し、1秒後にこのタスクを開始するタスクを実行します。

_    Timer timer = new Timer();
    timer.scheduleAtFixedRate(new TimerTask() {
        @Override
        public void run() {
            // Here is the repeated task
        }
    }, /*Start after*/1000, /*Repeats every*/5000);

    // here i stop the timer
    timer.cancel();
_

このタイマーは、timer.cancel()を呼び出すまで繰り返されます

RxAndroid拡張機能でRxJavaを学習しています

だから私はインターネットでこのコードを見つけました、私はそれを試してみましたが、繰り返されません:

_Observable.timer(3000, TimeUnit.MILLISECONDS)
    .subscribeOn(Schedulers.newThread())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe(new Action1<Long>() {
        @Override
        public void call(Long aLong) {
             // here is the task that should repeat
        }
    });
_

rxJavaのAndroid Timerの代替手段は何ですか。

14
MBH

timer演算子は、指定された遅延後にアイテムを発行し、完了します。 interval演算子を探していると思います。

Subscription subscription = Observable.interval(1000, 5000, TimeUnit.MILLISECONDS)
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Action1<Long>() {
                public void call(Long aLong) {
                    // here is the task that should repeat
                }
            });

停止する場合は、サブスクリプションでunsubscribeを呼び出すだけです。

subscription.unsubscribe()
35
csabapap

Observable.repeat()メソッドを呼び出して繰り返します

_Disposable disposable = Observable.timer(3000, TimeUnit.MILLISECONDS)
.subscribeOn(Schedulers.newThread())
.repeat()
.observeOn(AndroidSchedulers.mainThread())
.subscribe();
_

停止する場合は、disposable.dispose()を呼び出します

6
Anshuman