Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android RX-可观察。计时器只触发一次_Java_Android_Rx Android - Fatal编程技术网

Java Android RX-可观察。计时器只触发一次

Java Android RX-可观察。计时器只触发一次,java,android,rx-android,Java,Android,Rx Android,所以我试图创建一个可观测的,定期发射的,但由于某种原因,我无法理解,它只发射一次。有人能看出我做错了什么吗 Observable<Long> observable = Observable.timer(delay, TimeUnit.SECONDS, Schedulers.io()); subscription = observable .subscribeOn(Schedulers.io()) .o

所以我试图创建一个可观测的,定期发射的,但由于某种原因,我无法理解,它只发射一次。有人能看出我做错了什么吗

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();
                    }
                });
Observable-Observable=Observable.timer(延迟,TimeUnit.SECONDS,Schedulers.io());
订阅=可观察
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.订阅(新操作1(){
@凌驾
公开作废通知(长期有效){
requestRemoteSearchByStock();
}
});
当前延迟设置为2,文档中说明:

创建一个在给定延迟后发射特定项目的可观察对象

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

另一方面,操作员将发射以给定间隔隔开的项目

例如,此可观察对象将每秒发射一个项目:

Observable.interval(1, TimeUnit.SECONDS);

我知道这个话题很老了,但可能是为了未来的访客。(5分钟倒计时)

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

return Single.timer(5,TimeUnit.SECONDS).flatMap(
新函数(){
@凌驾
公共单一申请(长期){
//创建要重复调用的单个任务
返回Single.create();
}
})
.重试(新谓词(){
@凌驾
公共布尔测试(可丢弃可丢弃){
布尔响应=真;
//在这里实现您的逻辑,并将响应更新为false以停止
重试
返回响应;
}
});

这很好,除了如何防止内存泄漏。@ldrrp是什么让你认为这会泄漏任何东西?这是一个非常小的泄漏,我在不同的android版本/模拟器/设备上成功地绘制了多次,没有出现故障。在github上的开发人员拒绝确认这个问题后,我接着讨论了另一个问题。可能使用Schedulers.computation()作为计时器。
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
            });
 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;
          }
        });