2015-09-11 2 views
22

Итак, я пытаюсь создать наблюдаемый, который срабатывает регулярно, но по какой-то причине, которую я не могу понять, он срабатывает только один раз. Может ли кто-нибудь увидеть, что я делаю неправильно?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

ответ

40

Документация the timer operator говорит следующее:

Создать Observable, излучающий конкретный пункт после данной задержки

Таким образом, поведение, которое вы наблюдаете, ожидается - timer() испускает только один элемент после задержки.

The interval Оператор, с другой стороны, будет излучать предметы с интервалом в один интервал.

Например, этот Наблюдаемые будет испускать предмета каждый второй:

Observable.interval(1, TimeUnit.SECONDS); 
+0

Эй, только что нашел это в то же время. Большое спасибо за вашу помощь –

6

Я знаю, что тема старая, но, возможно, для будущих посетителей. (Таймер обратного отсчета 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 
      }); 
+0

Красивое решение! –