gpt4 book ai didi

android - 何时在 rxjava 中使用 `unSubscribeOn`

转载 作者:搜寻专家 更新时间:2023-11-01 09:25:57 25 4
gpt4 key购买 nike

我已经使用 RxJava 一段时间了。我使用 subscribeOnobserveOn 运算符来管理线程。我使用 subscribeOniocomputation 线程中启动可观察发射,并在主线程中使用 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() {

}
}));

如您所见,我正在将 Observer 添加到 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com