Когда использовать `unSubscribeOn` в rxjava - PullRequest
0 голосов
/ 03 июня 2018

Я уже некоторое время использую 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, чтобы в случае, если моя активность или фрагмент выходят из области видимости во время выполнения наблюдаемой операции в фоновом потоке, я мог безопасно отключиться.наблюдатель от цепи, чтобы избежать утечек памяти.Довольно просто.

Но в некоторых примерах я видел оператор unSubscribeOn, используемый для отмены подписки в определенном потоке.Я как бы не понимаю фактической необходимости в этом.Фактически, я никогда не использовал это, у меня не было никаких утечек памяти, так как я не использовал его.

Это то, что нам нужно использовать всегда?Или кто-нибудь может объяснить некоторые случаи использования, когда нам нужно перейти на unSubscribeOn?

Я также сослался на официальную документацию и некоторые примеры, но вроде не переваривал ее.Если бы кто-то мог объяснить с помощью образца, это было бы очень полезно.

1 Ответ

0 голосов
/ 03 июня 2018

Если вы установили подписку и наблюдаем, а не отмените подписку, типичное поведение заключается в том, что отмена подписки происходит в том же потоке, что и наблюдение.

Если вы устанавливаете только подписку и не наблюдаете, не отменяете подписку, не отписываетесьпроисходит в потоке подписки.

Отмена подписки будет полезна, если вы хотите запускать долго выполняющуюся задачу во время отписки.

Вы можете запустить вышеуказанные тесты, используя Thread.currentThread ().getId () для каждого сценария.

...