我正在尝试将一些基于侦听器模式的API包装到Observable中。我的代码大致如下所示。
def myObservable = Observable.create({ aSubscriber ->
val listener = {event ->
aSubscriber.onNext(event);
}
existingEventSource.addListener(listener)
})
但是,当观察者调用subscription.unscribe()时,我希望我的可观察对象立即将其侦听器从基础的existingEventSource中移除。我怎样才能实现这个目标?
Subscriber
实际上,抽象类有一个方法add
,可让您添加Subscription
s,而订阅服务器将取消订阅。
def myObservable = Observable.create({ aSubscriber ->
val listener = {event ->
aSubscriber.onNext(event);
}
existingEventSource.addListener(listener)
// Adds a lambda to be executed when the Subscriber un-subscribes from your Observable
aSubscriber.add(Subscriptions.create(() -> existingEventSource.removeListener(listener)));
})
想想aSubscriber
作为Observer
订阅了你Observable
; 我们称它为Subscriber
。只要Subscriber
仍订阅Observable
,则Observable
可以发出值。但是当Subscriber
取消订阅时,它应该停止。但是,如果我们希望在Subscriber
取消订阅时得到通知,则可以注册一个Action
在其发生时要运行的程序。这就是该add
方法的用途。正如@dwursteisen在评论中提到的那样;您基本上是在注册一个lambda,该lambda将在订阅者退订时执行。
也可以让订阅退订到其他调度程序上。见MainThreadSubscription
从rxanroid
项目如何做到这一点的例子。
这是一个如何使用它取消订阅主线程的示例
aSubscriber.add(new MainThreadSubscription() {
@Override
protected void onUnsubscribe() {
existingEventSource.removeListener(listener);
}
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句