重用订户

时间:2015-04-02 14:30:40

标签: java reactive-programming rx-java

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

2 个答案:

答案 0 :(得分:12)

您无法重复使用Subscriber,因为它会实现Subscription,其isUnsubscribed字段一旦设置为true,就永远不会再成为false ,因此Subscription不可重复使用。

另一方面,

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

答案 1 :(得分:0)

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