rx.Subscriber实体在取消订阅后是否可以重用?

时间:2019-05-31 13:10:53

标签: android rx-java

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

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

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

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

问题:为什么rx.Subscriber onNext(并进一步传递给订阅)的简单实现有效(也就是说,正在调用onNext),但是这个无效:

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

1 个答案:

答案 0 :(得分:2)

1.x Subscriber是有状态的,一旦取消订阅,它将立即取消订阅。您必须创建一个新实例或使用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);