重用订阅者

Reuse subscriber

在 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(),例如在用户单击刷新按钮后...

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

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

另一方面,

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