我在下面试过
Flowable.interval(100L, TimeUnit.MILLISECONDS)
.onBackpressureDrop()
.observeOn(Schedulers.computation())
.subscribe(new Subscriber<Long>() {
private Subscription subscription;
@Override
public void onSubscribe(Subscription subscription) {
this.subscription = subscription;
this.subscription.request(1L);
}
@Override
public void onNext(Long t) {
try {
Thread.sleep(300L);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(t);
subscription.request(1L);
}
...
});
我预计我会得到类似0,3,6的东西......
但是,我得到0,1,2,3 ......
因为Flowable最初得到request(Long.MAX_VALUE)
。
我检查了FlowableOnBackpressureDrop并找到了
@Override
public void onSubscribe(Subscription s) {
if (SubscriptionHelper.validate(this.s, s)) {
this.s = s;
actual.onSubscribe(this);
s.request(Long.MAX_VALUE);
}
}
由于我没有使用我在请求方法上设置的值, 我认为背压不起作用。
这是一个错误还是一个正确的行动?
我试过RxJava 2.0.0-RC2和RC3
答案 0 :(得分:1)
observeOn
提前请求和缓冲128个元素,因此在开始的一段时间内没有任何内容可以删除。如果你让它运行128 * 300ms,它将开始跳过值。您可以将带有重载的预取量设置为1,并且可以非常快速地查看值。