如何处理Observable RxJava中的处理

时间:2017-11-29 12:09:13

标签: java android rx-java rx-android rx-java2

我正在实施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方法。

1 个答案:

答案 0 :(得分:1)

请注意java.io.InterruptedIOException: thread interrupted不是来自rx。这是java.io的一个例外。对于dispose()操作,rxJava在网络请求执行期间被强制取消订阅并中断线程。

你无法真正告诉observable取消网络请求,因为rxJava不知道在Observable中运行的代码。您可以做的是使用doOnUnsubscribe检查网络请求是否仍在运行,如果是取消,则只需取消订阅即可取消。