可连接observable上的RxJava重新连接不起作用

可连接observable上的RxJava重新连接不起作用,java,kotlin,rx-java,Java,Kotlin,Rx Java,嗨,伙计们。我正在尝试用RxJava制作某种MVC。所以这个想法是 进行一些将始终订阅的固定订阅 有些是可以观察到的。此外,可以随时重新启动此可观察对象以重新运行,例如网络调用。我尝试了以下代码来测试此功能: class Main { companion object { @JvmStatic fun main(args: Array<String>) { val obs = Observable.interval(1,

嗨,伙计们。我正在尝试用RxJava制作某种MVC。所以这个想法是 进行一些将始终订阅的固定订阅 有些是可以观察到的。此外,可以随时重新启动此可观察对象以重新运行,例如网络调用。我尝试了以下代码来测试此功能:

class Main {
    companion object {
        @JvmStatic
        fun main(args: Array<String>) {
            val obs = Observable.interval(1, TimeUnit.SECONDS, Schedulers.io())
                .publish()

            val s1 = obs
                .doOnUnsubscribe { System.out.println("s1 unsubscribed") }
                .subscribe { System.out.println("first: $it") }

            val s = obs.connect()

            Thread.sleep(4000)

            System.out.println("unsubscribe")
            s.unsubscribe()

            Thread.sleep(1000)

            System.out.println("connect")
            val obsS2 = obs.connect()

            System.out.println("isUnsubscribed: ${s1.isUnsubscribed}")

            Thread.sleep(10000)
        }
    }
}
这是实际结果:

first: 0
first: 1
first: 2
unsubscribe
connect
isUnsubscribed: false

Process finished with exit code 0
我发现了一些帖子(,),人们说这是一个bug,但这个bug已经存在了很长一段时间

所以问题是:它真的是一个bug吗?如果没有,我怎么能做出这样的行为

编辑:
在版本1.3.4、1.2.10、1.1.10、1.0.10上测试,这不是一个bug,而是RxJava的可连接可观察的属性:如果取消订阅连接,以前订阅的使用者将被弹出,即使重新连接,也不会收到任何进一步的事件

通过使用
PublishSubject
,然后订阅和取消订阅到实际来源,您可以实现与Rx.NET行为类似的效果:

PublishSubject subject = PublishSubject.create();

subject.subscribe(System.out::println);

Subscription s = source.subscribe(subject::onNext);

s.unsubscribe();

Subscription s2 = source.subscribe(subject::onNext);

您也试过Rx2吗?试一下.publish().autoConnect()谢谢!我已经改变了我的架构,不再使用这种模式。)
PublishSubject subject = PublishSubject.create();

subject.subscribe(System.out::println);

Subscription s = source.subscribe(subject::onNext);

s.unsubscribe();

Subscription s2 = source.subscribe(subject::onNext);