RxJava2 publishSubject onNext方法似乎調用多次?

在封裝第三方類庫時候,想把第三方庫發送的 事件包裝成一個Observable,解決辦法自然是用主題(Subject)。需要監聽第三方發送的事件只需要訂閱這個主題就可以可了。

但是我發現事件只發送了一次,subject.onNext()只調用一次,爲什麼收到了很多次,即subscribe裏的業務執行了很多次。但還是發生了,自己想subject.onNext()調用一次,訂閱者就會收到一次回調。

其實並不是那麼回事, subject作爲數據源 與 數據的訂閱並不是一對一的關係,而是一對多。 而我在使用的過程並沒有取消訂閱,導致每次添加新的訂閱受,舊的訂閱沒有被取消,也就是說發生了內存泄漏,因爲訂閱我寫在了Activity中。沒有好好利用Disposeable。

我是在看subject.onNext()方法源碼時候發現這個問題的。

  @Override
    public void onNext(T t) {
        ObjectHelper.requireNonNull(t, "onNext called with null. Null values are generally not allowed in 2.x operators and sources.");
        for (PublishDisposable<T> pd : subscribers.get()) {
            pd.onNext(t);
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章