【问题标题】:Reuse subscriber重用订阅者
【发布时间】:2015-04-02 14:30:40
【问题描述】:

在 RxJava 中,我有一个 Subscriber 对象,我订阅了 Observable。稍后(在调用onComplete() 之后的一段时间)我创建了一个新的Observable 并使用之前使用的Subscriber 实例进行订阅。但是,这似乎行不通。订阅者不可重复使用吗?

例子:

class Loader extends Subscriber<T> {

   public void load(){
       Observable.just("Foo").subscribe(this);
   }

   public void onComplete(){
     // update UI
   }

}

在我的代码中,我想实例化一次Loader,并多次调用load(),例如在用户单击刷新按钮之后......

【问题讨论】:

    标签: java reactive-programming rx-java


    【解决方案1】:

    你不能重用Subscriber,因为它实现了Subscription,它有一个isUnsubscribed字段,一旦设置为true,就永远不会再变成false,所以Subscription是不可重用的。

    另一方面,Observer 不包含有关订阅状态的任何信息,因此您可以重复使用它。每次您将 Observer 订阅到 Observable 时,RxJava 实现都会为您将其包装在 new Subscriber 中。

    【讨论】:

      【解决方案2】:

      使用Observable::concat 创建一个Observable,它按顺序从多个Observable 发出项目。订阅那个。

      【讨论】:

      • 我不想连接它们...第一个可观察对象与第二个可观察对象无关...它们是独立的。我只想“重用”订阅者
      • 但从概念上讲,您是在说“订阅者,拿走这些物品;然后,拿走这些物品”。
      • 是的,你是对的,我的示例代码具有误导性。我改变了我的例子,给你一个更好的例子。
      • 你用错了,我想——为什么不简单地this.onNext(...)?或者有一个更具描述性的名称?
      • 我认为你的意思是ObserverObserver 是可重复使用的。但避免在订阅之间共享它,否则您可能会在Observer 中处理多线程问题。如果 Subscriber 本身不处理取消订阅,您将不需要它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多