我使用 RxJava 一段时间了。我使用 subscribeOn
和 observeOn
运算符来管理线程。我使用 subscribeOn
在 io
或 computation
线程中启动可观察发射,并使用 observeOn(AndroidSchedluers .mainThread())
在我的应用程序中,流通常如下所示
compositeDisposable.add(observable()
.flatMap(result-> { // do something })
.map(result -> // doSomething)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()))
.subscribeWith(new DisposableObserver<Object>() {
@Override
public void onNext(Object o) {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
}));
如您所见,我将观察者添加到 CompositeDisposable
中,这样,如果我的 Activity 或 fragment 在可观察对象在后台线程中执行某些操作期间超出范围,我可以安全地将观察者与链断开以避免任何内存泄漏。非常简单。
但在一些示例中,我看到了 unSubscribeOn
运算符用于使取消订阅在特定线程中进行。我有点不明白这样做的实际需要。事实上我从来没有使用过它,我也没有因为不使用它而导致任何内存泄漏。
这是我们需要一直使用的东西吗?或者有人可以解释一些我们需要使用 unSubscribeOn
的用例吗?
我也引用了官方文档和一些示例,但有点没有消化它。如果有人可以用示例进行解释,那将非常有帮助。
最佳答案
如果您设置了 subscribeOn 和observeOn 并且没有设置 unsubscribeOn ,典型的行为是,取消订阅发生在与observeOn相同的线程中。
如果只设置了 subscribeOn ,没有observeOn、unSubscribeOn,则取消订阅发生在 subscribeOn 线程。
如果您想在取消订阅期间运行长时间运行的任务,则 unSubscribeOn 将很有用。
您可以针对每个场景使用 Thread.currentThread().getId() 运行上述测试。
关于android - 何时在 rxjava 中使用 `unSubscribeOn`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50669004/