0
点赞
收藏
分享

微信扫一扫

RxJava 重复订阅引发的数据重复问题


其实标题说重复订阅引发的数据重复问题,严格上来说,它并不是问题,因为订阅了就会收到消息。
有问题的代码:

class MyObservable {
private val publishSubjectObservable = PublishSubject.create<String>()
fun connect() {
publishSubjectObservable.subscribe { println(it) }
}
fun publish(msg:String) {
publishSubjectObservable.onNext(msg)
}
}

测试:

val publishObservable = MyObservable()
publishObservable.connect()
publishObservable.connect()
publishObservable.connect()
publishObservable.publish("Hello world")

结果:

Hello world
Hello world
Hello world

分析:因为connect()被调用了三次,就是说MyObservable对象中的publishSubjectObservable被订阅了三次,因此会打印了三次。那么我们如果想让一个MyObservable实例中的publishSubjectObservable只被订阅一次,可以怎么办呢?方法当然有很多,我这里提供多比较喜欢的一种:

class MyObservable {
private val publishSubjectObservable = PublishSubject.create<String>()
private var disposable: Disposable? = null
fun connect() {
disposable?.dispose()
disposable = publishSubjectObservable.subscribe { println(it) }
}
fun publish(msg:String) {
publishSubjectObservable.onNext(msg)
}
}

也就是每次订阅前,都把前一个订阅取消掉。


举报

相关推荐

0 条评论