之间有什么区别:
Observable<String> observable = Observable
.interval(0, 1, TimeUnit.SECONDS)
.flatMap(new Func1<Long, Observable<String>>() {
@Override
public Observable<String> call(Long aLong) {
return Observable.just("MyString");
}
})
Run Code Online (Sandbox Code Playgroud)
和:
Observable<String> observable = Observable.just("MyString")
.repeatWhen(new Func1<Observable<? extends Void>, Observable<?>>() {
@Override
public Observable<?> call(Observable<? extends Void> completed) {
return completed.delay(1, TimeUnit.SECONDS);
}
})
Run Code Online (Sandbox Code Playgroud)
第二个是更清洁但实际上并考虑到背压,这两种解决方案的行为方式是否相同?
Dan*_*Lew 13
根据您的源可观察性(在这种情况下just("MyString")),可能会有一些差异:
interval()将每秒运行(如果可能),而repeatWhen()将始终delay()为1秒.对于just()这没关系,但如果您的源需要一段时间才能运行(例如500ms),那么您将看到时间上的差异:interval()将每1,000ms重新订阅一次,但repeatWhen(delay())每1500ms运行一次(500ms输出+ 1,000ms延迟).
如果您的源需要更长超过一秒钟,然后就会出现每间重新订阅没有停顿interval(),因为它只会等到前flatMap()正在执行一个又一个做过!
如果你使用a Scheduler,flatMap()那么你可以实现一些不可能的并行化repeatWhen().同样,这并不重要just(),但它会长期运行Observable.有关更多信息,请查看这篇精彩的文章.
我不相信这是所有两者之间的差异,有人谁是更熟悉RxJava的内部大概可以点多了出来.
| 归档时间: |
|
| 查看次数: |
2085 次 |
| 最近记录: |