2015-10-14 75 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())'而不是使用訂閱者。 –

相關問題