何时在rxjava

时间:2018-06-03 17:15:50

标签: android rx-java rx-java2 rx-android

我一直在使用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() {

                            }
                        }));

正如你所看到的,观察者我正在添加CompositeDisposable以便,如果我的活动或片段在观察者在后台线程中做某事时超出了范围,我可以安全地断开连接链中的观察者避免任何内存泄漏。很简单。

但在某些示例中,我看到unSubscribeOn运算符用于使取消订阅位于特定线程中。我有点不理解实际需要。事实上,我从来没有使用过它,我没有通过不使用它来结束任何内存泄漏。

我们需要始终使用它吗?或者,任何人都可以解释我们需要去unSubscribeOn的一些用例吗?

我已经提到了官方文档和一些例子,但有点没有消化它。如果有人可以用样品解释,那将非常有帮助。

1 个答案:

答案 0 :(得分:2)

如果设置了subscribeOn和observeOn而没有设置unsubscribeOn,典型的行为是,取消订阅发生在与observeOn相同的线程中。

如果只设置了subscribeOn,而没有设置observeOn,没有设置unSubscribeOn,则取消订阅会发生在subscribeOn线程上。

如果您想在取消订阅期间运行长时间运行的任务,则unSubscribeOn将非常有用。

您可以使用 Thread.currentThread()。getId()为每个方案运行上述测试。