Подтвердить что ты не робот

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

4b9b3361

Ответ 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
            });