Android RX-Observable.temporizador solo disparando una vez


Así que estoy tratando de crear un observable que se dispara sobre una base regular, pero por alguna razón que no puedo entender, solo se dispara una vez. ¿Alguien puede ver lo que estoy haciendo mal?

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();
                    }
                });

Actualmente delay se establece en 2

Author: James King, 2015-09-11

2 answers

La documentación para el operador del temporizador dice esto:

Crear un Observable que emite un elemento en particular después de un retraso dado

Por lo tanto, el comportamiento que está observando es esperado- timer() emite solo un elemento después de un retraso.

El operador interval, por otro lado, emitirá elementos espaciados con un intervalo dado.

Por ejemplo, este Observable emitirá un elemento cada segundo:

Observable.interval(1, TimeUnit.SECONDS);
 46
Author: Tanis.7x,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-09-11 13:21:50

Sé que el tema es viejo, pero tal vez para futuros visitantes. (5 min cuenta atrás temporizador)

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
            });
 11
Author: Jack the Ripper,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-04 18:21:14