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