Rx java 在RxJava中取消一个可观测的
我有一个可观察到的正在执行下载。然而,当我点击一个按钮时,我想取消那个可观察的 这怎么可能Rx java 在RxJava中取消一个可观测的,rx-java,Rx Java,我有一个可观察到的正在执行下载。然而,当我点击一个按钮时,我想取消那个可观察的 这怎么可能 谢谢。您不能真正告诉可观察对象取消网络请求,因为RxJava不知道可观察对象内部运行的代码。您可以使用dounsubscribe检查网络请求是否仍在运行,如果是取消,则在您想要取消时取消订阅。这应该会让您大致了解情况。摘要是使用Observable.use()并使用订户订阅Observable,这样当用户单击按钮取消时,您可以调用订户。unsubscribe() 这是一个提纲 Subscriber<
谢谢。您不能真正告诉可观察对象取消网络请求,因为RxJava不知道可观察对象内部运行的代码。您可以使用
dounsubscribe
检查网络请求是否仍在运行,如果是取消,则在您想要取消时取消订阅。这应该会让您大致了解情况。摘要是使用Observable.use()
并使用订户订阅Observable
,这样当用户单击按钮取消时,您可以调用订户。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);
这将停止可观察流并调用socketDisposer()
停止网络活动
您尚未指定下载的性质(ftp、http等),但答案并没有真正改变,因为所有这些传输都符合此模式。在我的案例中,我有一个发布主题,它在特定条件下发送项目。在某些情况下,我想取消它,因此我添加了一个保存状态的密封类:
sealed class DelayedItem {
object Ignore : DelayedItem()
data class Handle(val text: String) : DelayedItem()
}
我的订户就这样被弹回了:
myPublishSubject
.subscribeOn(Schedulers.io())
.debounce(500, TimeUnit.MILLISECONDS)
.subscribe {
if (it is DelayedItem.Handle)
handleItem(it)
}
希望有帮助 你能提供一些你已经尝试过的代码吗?是的,使用<代码>是个好主意,但我可能会让按钮点击也反应,只使用<代码>可观察。。takeUntil(button.clickedSource())
而不是使用订阅服务器。
myPublishSubject
.subscribeOn(Schedulers.io())
.debounce(500, TimeUnit.MILLISECONDS)
.subscribe {
if (it is DelayedItem.Handle)
handleItem(it)
}