2015-10-14 87 views
3

我有一个正在执行下载的observable。但是,当我点击一个按钮时,我想要取消该可观察点。在RxJava中取消Observable

这怎么可能?

谢谢。

+0

你能提供一些你已经试过的代码吗? – Gluck

回答

4

因为RxJava不知道Observable内部运行的代码,所以你不能真正告诉observable取消网络请求。你可以做的是使用doOnUnsubscribe来检查网络请求是否仍在运行,如果它取消了,那么只需取消订阅即可取消。

2

这应该给你一个总的想法。摘要将使用Observable.using()并订阅Observable并使用Subscriber,因此当用户单击按钮取消时,您可以拨打subscriber.unsubscribe()

这是一个大纲。

Subscriber<T> subscriber = ...; 
Observable 
    // create a stream from a socket and dispose of socket 
    // appropriately 
    .using(socketCreator(host, port, quietTimeoutMs), 
      socketObservableFactory(charset), 
      socketDisposer(), true) 
    // cannot ask host to slow down so buffer on 
    // backpressure 
    .onBackpressureBuffer() 
    .subscriber(subscriber); 

在点击一个按钮调用:

subscriber.unsubscribe() 

这将停止观测的流,并呼吁socketDisposer()停止网络活动。

您尚未指定下载的性质(ftp,http等),但答案并未真正改变,因为所有这些传输都适合这种模式。

+1

是的,'使用'是一个好主意,但我可能会让按钮点击被动,并且只使用'Observable'。 ... ..takeUntil(button.clickedSource())'而不是使用订阅者。 –

相关问题