问题
In android i use Timer to execute task that repeats every 5 seconds and starts after 1 second in this way:
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();
this timer will repeat Until i call timer.cancel()
I am learning RxJava with RxAndroid extension
So i found this code on internet, i tried it and it doesnt repeat:
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
}
});
so what is the alternative for the android Timer in RxJava.
回答1:
timer operator emits an item after a specified delay then completes. I think you looking for the interval operator.
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
}
});
if you want to stop it you just call unsubscribe on the subscription:
subscription.unsubscribe()
回答2:
Call Observable.repeat()
method to repeat
Disposable disposable = Observable.timer(3000, TimeUnit.MILLISECONDS)
.subscribeOn(Schedulers.newThread())
.repeat()
.observeOn(AndroidSchedulers.mainThread())
.subscribe();
If you want to stop it call disposable.dispose()
来源:https://stackoverflow.com/questions/38605090/rxjava-timer-that-repeats-forever-and-can-be-restarted-and-stopped-at-anytime