rx.Subscriber 取消订阅后实体无法重复使用?
rx.Subscriber entity cannot be reused after unsubscribe?
我有这样的构造(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.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);
我有这样的构造(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.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);