Rx java 取消订阅Observable Rxjava

Rx java 取消订阅Observable Rxjava,rx-java,observable,rx-java2,subscription,unsubscribe,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>() {

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

                }

            }

        });
Observable sampleObservable=Observable.just(accountNum);
Subscription sampleSub=sampleObservable.SubscripteBeon(Schedulers.io()).Subscription(new Action1()){
@凌驾
公共作废调用(字符串accountNum){
试一试{
//调用后端api
AccountResponse response=getAccountDetails(accountNum);
debug(“帐户响应:+response.toString());
}捕获(例外e){
logger.error(例如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 sampleObservable=Observable.just(accountNum);
Subscription sampleSub=sampleObservable.SubscripteBeon(Schedulers.io()).Subscription(new Action1()){
@凌驾
公共作废调用(字符串accountNum){
试一试{
//调用后端api
AccountResponse response=getAccountDetails(accountNum);
debug(“帐户响应:+response.toString());
}捕获(例外e){
logger.error(例如getMessage());
}
}
});
//退订
sampleSub.unsubscribe();
如前所述

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


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

您可以处理,在Rx api链中,您将获得名为doOnSubscribe(一次性)的乐趣,存储该一次性数据并调用disposable.dispose(),这将清除订阅

无论何时,只要你订阅了stream,它就会给你一次性的回报,使用它并处理它


(无论哪种方式你都可以做到)

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