我的使用案例与将RxJava2与Firebase数据库一起使用有关。
我有一个DatabaseReference,我可以为它注册值监听器。 我可以将它变成像这样的流动:
disposable = Flowable.create<DataSnapshot>({ s ->
dbRef.addValueEventListener(object : ValueEventListener {
override fun onCancelled(p0: DatabaseError) {...}
override fun onDataChange(value: DataSnapshot) {
s.onNext(value)
}
})
}, BackpressureStrategy.BUFFER)
.subscribe(...)
我希望能够在丢弃一次性物品时移除听众。 知道我怎么能这样做吗?
我在rxjava 1中看到可能有this possibility,但它在rxjava2中不可用
答案 0 :(得分:3)
使用RxJava2,您需要使用setCancellable()方法,并将侦听器删除代码放在那里。
当使用Emitter.setCancellation()创建Observable时,这与RxJava1中的Observable.fromEmitter()非常相似。
请akarnokd提及有关取消的说明:
“但请注意,除非创建逻辑放弃调度程序(通过终止或异步),否则取消逻辑可能永远不会执行,因为相同的池活动锁定。”
(RxJava 2: always unsubscribe on the .subscribeOn(..) scheduler?)