从this article阅读主题2,很明显,正确使用create()
可能会涉及多个问题,例如:
取消订阅Observable时注销注销(否则可能会导致内存泄漏)
仅在订阅者仍被订阅时使用onNext或onCompleted发出事件
使用onError在上游传播错误
处理背压
但是看到RxJava2开发人员的示例,例如this one,其中使用create()
而没有任何进一步的检查或警告,让我想知道create()
的问题有多深? / p>
如果我希望Subject
可以随时推送一个值,就像该链接中的那个一样:
Subject<Integer> subject = BehaviorSubject.<Integer>create().toSerialized();
Observable<Integer> observable = subject.observeOn(AndroidSchedulers.mainThread());
observable.subscribe(System.out::println);
subject.onNext(1)
可以使用create()
还是危险吗?如何知道何时需要保护create()
排放物以及何时不需要保护排放物?
答案 0 :(得分:2)
Observable.create(OnSubscribe)
与BehaviorSubject.create()
的创建不同。后者始终是安全的,因为它创建了最终的预先实现的 BehaviorSubject
,这是一个热门 Observable
。
Observable.create(OnSubscribe)
用于从头开始设置冷 Observable
,并且要求开发人员正确实施整个可观察的协议。它容易出错,在1.x后期,不推荐使用create(OnSubscribe)
方法。请阅读其javadoc了解更多详细信息。
在RxJava 2中,两种类型的create
方法都是安全的。