我想在RxJava中实现一个下载一些文件的处理队列。我想下载的文件数量最多可达100个。
所有内容都是使用RxJava 1.1.1在Android上开发的
我目前的实现看起来像这样:
PublishSubject<URL> publishSubject = PublishSubject.create();
_subject = new SerializedSubject<>(publishSubject);
_subscription = _subject
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.subscribe(_getObserver()); // Observer
_subject.onBackpressureBuffer(10000, new Action0() {
@Override
public void call() {
Log.d(TAG, "onBackpressureBuffer called");
return;
}
});
// download a file
_subject.onNext(aValidURL);
_getObserver()
返回一个新的观察者对象,该对象在&#34; onNext&#34;方法
然而,我的问题是我很快得到MissingBackpreasureException
,我不明白。我尝试实现backpreasurebuffer
,但它似乎没有被调用。
我做错了什么?
答案 0 :(得分:2)
在RxJava中,当您应用运算符时,您将获得一个具有已修改行为的新Observable实例,但原始实例保持不变。在这里,您在onBackpressureBuffer
上拨打了_subject
,但之后没有使用其结果,否则通话无效。您需要按顺序应用它:
PublishSubject<URL> publishSubject = PublishSubject.create();
_subject = new SerializedSubject<>(publishSubject);
_subscription = _subject
.onBackpressureBuffer(10000, new Action0() {
@Override
public void call() {
Log.d(TAG, "onBackpressureBuffer called");
return;
}
})
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.io())
.subscribe(_getObserver()); // Observer
// download a file
_subject.onNext(aValidURL);