首页 > 解决方案 > rx.Subscriber 实体退订后不能重用?

问题描述

我有这样的构造(RxJava 1.3.x):

view().filter(view -> view != null).subscribe(subscriber);

这里也是 view() 的定义。它主动发出View实体。

public Observable<View> view() {
    return views;
}

问题:为什么rx.SubscriberonNext 的简单实现(并进一步传递给订阅)有效(即 onNext 被调用)但这个没有:

subscriber.unsubscribe();
view().filter(view -> view != null).subscribe(subscriber);

标签: androidrx-java

解决方案


1.xSubscriber是有状态的,一旦你取消订阅它,它将立即取消订阅任何未来的使用。您必须创建一个新实例或使用rx.Observer接口的实例。

// as fields for example

Subscription subscripion;
Observer<View> observer = new Observer<View>() {
     @Override public void onNext(View t) { }
     @Override public void onError(Throwable t) { }
     @Override public void onCompleted() { }
});

// ...

if (subscription != null) subscription.unsubscribe();

subscription = view().filter(view -> view != null).subscribe(observer);

推荐阅读