我对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();
答案 0 :(得分:0)
unsubscribe()停止在订阅服务器上接收通知 收到此订阅时已注册的。
这意味着如果您不再需要接收数据,则可以调用此方法。您会在序列结束之前停止接收数据。例如,当您在屏幕上时,您可以观察来自服务器的数据,但是当您关闭屏幕时,则可以退订该源。
答案 1 :(得分:0)
您可以进行处置,在Rx api链中,您会获得名为doOnSubscribe(disposable)的乐趣,将其存储为可处置对象,然后调用disposable.dispose()即可清除订阅
或
无论何时订阅流,都会为您提供Disposable作为回报,使用并处置它。
(无论哪种方式)