首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >取消订阅后不能重用rx.Subscriber实体?

取消订阅后不能重用rx.Subscriber实体?
EN

Stack Overflow用户
提问于 2019-05-31 21:10:53
回答 1查看 55关注 0票数 0

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

代码语言:javascript
复制
view().filter(view -> view != null).subscribe(subscriber);

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

代码语言:javascript
复制
public Observable<View> view() {
    return views;
}

问:为什么rx.Subscriber onNext的简单实现(并进一步传递到subscribe)可以工作(即调用onNext ),但这个不能:

代码语言:javascript
复制
subscriber.unsubscribe();
view().filter(view -> view != null).subscribe(subscriber);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-05 15:32:22

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

代码语言:javascript
复制
// 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);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56395754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档