我有一个正在执行下载的观察对象。但是,当我单击按钮时,我想取消该可观察性。
怎么可能?
谢谢。
您无法真正告诉Observable取消网络请求,因为RxJava不了解Observable内部运行的代码。您可以使用doOnUnsubscribe
检查网络请求是否仍在运行以及是否被取消,然后在要取消时取消订阅。
这应该为您提供总体思路。摘要是使用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等),但答案并没有真正改变,因为所有这些传输都符合此模式。
就我而言,我有一个发布主题,该主题在一定条件下正在发射物品。在某些情况下,我想取消它,所以我添加了一个保存状态的密封类:
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)
}
希望有帮助!