Android RX - Observable.timer только один раз
Итак, я пытаюсь создать наблюдаемый, который срабатывает регулярно, но по какой-то причине, которую я не могу понять, он срабатывает только один раз. Может ли кто-нибудь увидеть, что я делаю неправильно?
Observable<Long> observable = Observable.timer(delay, TimeUnit.SECONDS, Schedulers.io());
subscription = observable
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Long>() {
@Override
public void call(Long aLong) {
searchByStockHelper.requestRemoteSearchByStock();
}
});
текущая задержка установлена на 2
Ответы
Ответ 1
Документация для оператора таймера говорит следующее:
Создать наблюдаемое, которое испускает определенный элемент после заданной задержки
Таким образом, поведение, которое вы наблюдаете, ожидается - timer()
выдает только один элемент после задержки.
Оператор интервала, с другой стороны, будет выделять элементы, расположенные на расстоянии с заданным интервалом.
Например, этот Observable будет выделять элемент каждую секунду:
Observable.interval(1, TimeUnit.SECONDS);
Ответ 2
Я знаю, что тема старая, но, возможно, для будущих посетителей. (Таймер обратного отсчета 5 мин)
Disposable timerDisposable = Observable.interval(1,TimeUnit.SECONDS, Schedulers.io())
.take(300)
.map(v -> 300 - v)
.subscribe(
onNext -> {
//on every second pass trigger
},
onError -> {
//do on error
},
() -> {
//do on complete
},
onSubscribe -> {
//do once on subscription
});