Android RX - Observable.timer只触发一次

时间:2015-09-11 12:59:53

标签: java android rx-android

所以我试图创建一个定期发射的可观察物,但由于某些我无法弄清楚的原因,它只发射一次。谁能看到我做错了什么?

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

3 个答案:

答案 0 :(得分:49)

the timer operator的文档说明了这一点:

  

创建一个在给定延迟后发出特定项目的Observable

因此,您所观察到的行为是预期的 - timer()在延迟后仅发出一个项目。

另一方面,

The interval运算符将发出以给定间隔隔开的项目。

例如,此Observable将每秒发出一个项目:

Observable.interval(1, TimeUnit.SECONDS);

答案 1 :(得分:15)

我知道话题很老但可能是为了未来的访客。 (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
            });

答案 2 :(得分:0)

  

我在代码中实现了这种方式,因为它可以确保任务运行在再次调用之前完成,并且您可以更新延迟。

 return Single.timer(5, TimeUnit.SECONDS).flatMap(
        new Function<Long, Single<Object>>() {
          @Override
          public Single<Object> apply(Long aLong) {
            //create single with task to be called repeatedly
            return Single.create();
          }
        })
        .retry(new Predicate<Throwable>() {
          @Override
          public boolean test(Throwable throwable) {
            boolean response = true;
            //implement your logic here and update response to false to stop 
              retry
            return response;
          }
        });