说我想在用户按下按钮时从我的Android应用发送网络请求。我正在使用RxJava,由于如果用户再次点击发送请求,我想取消上一个请求,则需要使用swithcMap,如下所示:
buttonClickObservable.map(e -> searchTextView.getText().toString())
.switchMap(searchText -> sendNetworkRequestToServer(searchText));
如果请求在服务器上处理几秒钟,同时用户再次单击该按钮,会发生什么情况。据我了解,第一个可观察对象将被处理,并且将生成一个新的网络调用,但是服务器已经开始处理第一个可观察对象,所以我发现switchMap在这里没有帮助我吗?
取消RxJava可观察执行的唯一方法-取消订阅。因此,您只需执行以下操作即可:RxJavaCallAdapter会将取消委托委托给okhttp客户端。
Subscription subscription = getObservable().subscribe();
//When you want to stop execution
subscription.unsubsribe();
final Call<T> call = originalCall.clone();
///如果取消订阅仍在进行中,则尝试取消呼叫。
subscriber.add(Subscriptions.create(new Action0() {
@Override public void call() {
call.cancel();
}
}));