我对Rx java可观察量很陌生,所以我不确定何时取消订阅。 这就是我的代码实现的方式
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();
你可以处置,在Rx api链中,你会得到叫做doOnSubscribe(disposable(的乐趣,存储一次性的并调用disposable.dispose((,这将清除订阅
或
每当您订阅流时,都会给您一次性作为回报,使用它并处理掉它。
(无论哪种方式,您都可以这样做(
正如文档所说
取消订阅(( 停止接收订阅服务器上的通知 在收到此订阅时已注册。
这意味着如果您不再需要接收数据,则可以调用此方法。在后续结束之前,您将停止接收数据。例如,当您在屏幕上时,您可以观察来自服务器的数据,但是当您关闭屏幕时,您可以取消订阅此源。