【发布时间】:2018-10-17 20:32:14
【问题描述】:
从this article 阅读主题#2,很明显正确使用create() 可能涉及几个问题,例如:
取消订阅 Observable 时取消注册回调(不这样做会导致内存泄漏)
仅在订阅者仍处于订阅状态时使用 onNext 或 onCompleted 发出事件
使用 onError 向上游传播错误
处理背压
但是看到来自 RxJava2 开发人员的示例,例如 this one,其中 create() 在没有任何进一步检查或警告的情况下使用,让我想知道 create() 的问题有多严重?
如果我想要 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() 排放,何时不需要?
【问题讨论】:
-
上述文章大约是 1.2.6,而在 RxJava1 中
create被重命名为unsafeCreate,它甚至在 RxJava2 中也没有。 Rx2 中的Observable.create实际上是 Rx1 中的Observable.fromEmitter {,它始终可以安全使用。 -
有趣,我正在查看
SingleFromCallable的源代码,因为它处理了文章中的大部分内容,我认为它仍然有效
标签: rx-java2