【问题标题】:Unsubscribe from Observable Rxjava取消订阅 Observable Rxjava
【发布时间】:2019-03-19 12:58:39
【问题描述】:

我对 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();

【问题讨论】:

  • 不会的。你需要通过 Observable::create 和 Observable::flatMap 正确地取消你的工作。并在 Observable::create 中设置你的 cancalable。
  • 如果代码本身是RxJava1,为什么会有RxJava2标签?

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


【解决方案1】:

正如documentation所说的

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

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

【讨论】:

    【解决方案2】:

    你可以处理,在 Rx api 链中你会得到乐趣,调用 doOnSubscribe(disposable),存储一次性并调用disposable.dispose(),这将清除订阅

    或者

    每当您订阅流时,都会给您 Disposable 作为回报,使用它并丢弃它。

    (无论哪种方式都可以)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-29
      • 1970-01-01
      相关资源
      最近更新 更多