簡體   English   中英

我怎樣才能停止觀察一個 observable 而不在 RxJava2 中處理它?

[英]How can I stop observing an observable without disposing it in RxJava2?

我對 RxJava2 有一個不尋常的問題。

基本上我們有以下場景:

  • 用戶拍照並按下一步啟動網絡請求
  • 網絡請求完成后,ViewModel 中的一個方法被執行,觸發 UI 動作
  • 用戶可以隨時按下返回按鈕,這應該會重新啟動流程,即使之前的照片上傳成功,它也不應該觸發任何操作。

現在通常我會將所有代碼放入 CompositeDisposable 並根據我的情況調用 clear() 或 dispose () 。 將在用戶按下返回按鈕后停止觀察上傳的照片

但是,在這種情況下我不能調用 clear() 或 dispose(),因為它會終止網絡請求 照片通常為 1-2 mb,通過調用 dispose 它將終止網絡請求..,我怎樣才能停止觀察以前的流量而只觀察未來的上傳? 不終止以前的上傳?

我知道應該有某種方式來通知我的 observable 用戶按下了后退按鈕,但我所有的嘗試似乎都是 hacky 和不干凈的。 我想學習處理這種情況的正確方法。

我認為正確的方法是使用takeUntil ,這樣你就可以取消當前的上傳並在那時完成。 然后您需要使用repeat再次重新訂閱以供將來上傳。

像這樣的東西:

compositeDisposable += nextButtonClicked
        .firstOrError()
        .flatMapCompletable {
          networkUpload.takeUntil(backButtonClicked).ignoreElements()
        }.repeat().subscribe()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM