我正在实施Observable
它应该只从网络下载一个文件,分成多个部分。
这是我的实施
private static class MultipartDownloadObservable extends Observable<String> implements Cancellable {
@Override
protected void subscribeActual(Observer<? super String> observer) {
// Start loading
subscriber = observer;
progressBundle = new ProgressBundle<>();
startDownloading();
}
@Override
public void cancel() throws Exception {
if (!lastDownloadingInfo.isFinish()) {
okHttpClient.dispatcher().queuedCalls().stream().filter(call -> call.request().tag().equals(url)).forEach(Call::cancel);
}
if (subscriber != null) {
subscriber.onComplete();
}
}
}
在我的代码中,我创建了这个类的实例,然后在dispose
对象上调用Disposable
方法从subscribe方法返回。
downloadSubscription.dispose();
然而它会抛出错误。
java.io.InterruptedIOException: thread interrupted
如何正确处理Observable
?我已尝试实施Canceble
接口,但未调用cancel
方法。
答案 0 :(得分:1)
请注意java.io.InterruptedIOException: thread interrupted
不是来自rx。这是java.io的一个例外。对于dispose()
操作,rxJava在网络请求执行期间被强制取消订阅并中断线程。
你无法真正告诉observable取消网络请求,因为rxJava不知道在Observable中运行的代码。您可以做的是使用doOnUnsubscribe
检查网络请求是否仍在运行,如果是取消,则只需取消订阅即可取消。