如何停止观察可观察对象而不将其放置在RxJava2中?

问题描述 投票:0回答:1

我在RxJava2中遇到一个不寻常的问题。

基本上我们有以下情况:

  • 用户拍照并按下一步开始网络请求
  • 网络请求完成后,将执行ViewModel中的方法,该方法将触发UI操作
  • 用户随时可以按下后退按钮,这将重新启动流程,即使成功上传了上一张照片也不应触发任何操作。

现在通常我会根据自己的情况将所有代码放入CompositeDisposable并调用clear()或dispose()。使用后,此将停止观察已上传照片

但是,在这种情况下,我无法调用clear()或dispose(),因为它将终止网络请求 t!照片通常为1-2 mb,通过调用处置它将终止网络请求...如何停止观察先前的流量并仅观察将来的上传,而不会终止先前的上传?

我知道应该有某种方式可以通知我观察到用户按下了后退按钮,但是我的所有尝试似乎都是脚的,并不干净。我想学习处理这种情况的正确方法。

java rx-java rx-java2 dispose
1个回答
0
投票

我认为正确的方法是使用takeUntil,因此您可以取消当前的上传,并在该点完成。然后,您需要使用repeat重新订阅以供将来上传。

类似这样的东西:

compositeDisposable += nextButtonClicked
        .firstOrError()
        .flatMapCompletable {
          networkUpload.takeUntil(backButtonClicked).ignoreElements()
        }.repeat().subscribe()
© www.soinside.com 2019 - 2024. All rights reserved.