Как говорится в документации
Debounce только испускает элемент из Observable, если определенный промежуток времени прошел без его испускания другого элемента. Он отфильтровывает элементы, испускаемые источником Observable, за которым быстро следует другой испущенный элемент.
Поскольку в вашем случае все элементы испускаются в окне времени. Выполняется только последний элемент, и все остальные элементы отфильтровываются.
Я предполагаю, что вы ищете Delay
Оператор « Задержка» изменяет свой источник. Наблюдается путем приостановки определенного периода времени (указанного вами) перед тем, как испускать каждый элемент источника Observable. Это приводит к сдвигу всей последовательности элементов, исходящих вовремя вовремя, с помощью указанного указанного приращения.
Поэтому вместо этого он должен выглядеть примерно так:
getIntegerObservable()
.delay(1, TimeUnit.SECONDS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(...);
Вы также должны подумать о вызове delay(..)
перед тем, subscribeOn(..)
чтобы избежать блокировки основного потока
Оформить заказ эту статью , она объясняет разницу между subscribeOn
иobserveOn
ОБНОВИТЬ
Вы можете обернуть CountDownTimer в Observerable. Например:
Observable.create(emitter -> new CountDownTimer(7000, 1000) {
public void onTick(long millisUntilFinished) {
emitter.onNext(millisUntilFinished / 1000);
}
public void onFinish() {
emitter.onComplete();
}
}.start())
.doOnNext() //you can log your timer here
.subscribe(); //or here
БОНУС (Просто для удовольствия: D)
RxJava выглядит намного круче с java8
Observable.create(this::startCountDownTimer)
.doOnNext() //use long value
.map(String::valueOf) //map to string
.doOnNext() //use string value
.doOnComplete() //gets called when the timer is up
.subscribe(this::handleTick, this::handleError);
Обратный отсчет
private void startCountDownTimer(ObservableEmitter<Long> emitter) {
new CountDownTimer(7000, 1000) {
public void onTick(long millisUntilFinished) {
emitter.onNext(millisUntilFinished / 1000);
}
public void onFinish() {
emitter.onComplete();
}
}.start();
}
Метод обращения с ручкой
private void handleTick(String timer) {
//Update UI
}
Метод обработки ручек
private void handleError(Throwable t) {
//Log and inform user
}