取消订阅Observable Rxjava

时间:2018-10-15 06:37:26

标签: rx-java observable rx-java2 subscription unsubscribe

我对Rx Java observables很陌生,所以我不确定何时取消订阅。这就是我的代码实现方式

Observable<String> sampleObservable = Observable.just(accountNum);
        Subscription sampleSub = sampleObservable.subscribeOn(Schedulers.io()).subscribe(new Action1<String>() {
            @Override
            public void call(String accountNum) {

                try {
                    //call backend api
                    AccountResponse response = getAccountDetails(accountNum);
                    logger.debug("Account response :" + response.toString());

                } catch (Exception e) {
                    logger.error(e.getMessage());

                }

            }

        });

我可以在“ sampleSub.unsubscribe()”末尾退订吗?我在这里担心的是,如果“ getAccountDetails(accountNum)”调用花费时间才能完成并且代码取消订阅,那么它将取消/影响“ getAccountDetails(accountNum)”调用吗?如果是,那么只有在通话结束后才有办法取消订阅吗?

Observable<String> sampleObservable = Observable.just(accountNum);
    Subscription sampleSub = sampleObservable.subscribeOn(Schedulers.io()).subscribe(new Action1<String>() {
        @Override
        public void call(String accountNum) {

            try {
                //call backend api
                AccountResponse response = getAccountDetails(accountNum);
                logger.debug("Account response :" + response.toString());

            } catch (Exception e) {
                logger.error(e.getMessage());

            }

        }

    });

   //unsubscribing
    sampleSub.unsubscribe();

2 个答案:

答案 0 :(得分:0)

documentation

  

unsubscribe()停止在订阅服务器上接收通知   收到此订阅时已注册的。

这意味着如果您不再需要接收数据,则可以调用此方法。您会在序列结束之前停止接收数据。例如,当您在屏幕上时,您可以观察来自服务器的数据,但是当您关闭屏幕时,则可以退订该源。

答案 1 :(得分:0)

您可以进行处置,在Rx api链中,您会获得名为doOnSubscribe(disposable)的乐趣,将其存储为可处置对象,然后调用disposable.dispose()即可清除订阅

无论何时订阅流,都会为您提供Disposable作为回报,使用并处置它。

(无论哪种方式)