使用 Reactive Android 拉动刷新时添加更多订阅

Add more Subscription when pull to refresh with Reactive Android

我编写代码从服务器获取数据并显示到列表视图。 而且我还添加了下拉刷新功能。 我想知道我们是否在调用拉动刷新时添加更多订阅,这是最佳做法还是我应该在添加新订阅之前取消订阅?

CompositeSubscription mSubscription = new CompositeSubscription();
private void pullToRefresh() {
  Subscription subscription = mMatchingApi.getRequest(new GetRequest(
            new GetRequest.Builder().setRequestIds(orderIds)))
            .subscribe(new Subscriber<GetRequestResponse>() {
               //update list
                }
            });
     mSubscription.add(subscription);
}

我也在onDestroy中清除了订阅

   @Override
   public void onDestroy() {
    if (mSubscription != null) {
        mSubscription.clear();
     }
   }

例如,如果我多次调用函数 pullToRefresh()(两次或三次)。 例如:

result 1 = pullToRefresh();
result 2 = pullToRefresh();
result 3 = pullToRefresh();

那么如果result 1还没完成,result 2先于result 1完成,那么list的数据会显示错误? (显示结果 1 但它应该显示结果 2) 我应该在添加新订阅之前清除订阅 1 吗?

使用单独的 SerialSubscription 只保持最新的请求:

CompositeSubscription mSubscription = new CompositeSubscription();
SerialSubscription mPullRequest = new SerialSubscription();

{
    mSubscription.add(mPullRequest); // Stop all requests if mSubscription is unsubscribed
}

private void pullToRefresh() {
    /* same code as before */
    mPullRequest.set(subscription);
}

关于您的第一个订阅,当您的数据加载并调用 onComplete() 方法时,此订阅会自动取消订阅。

关于下拉刷新,我不知道你是如何实现的,但是例如Android RefreshLayout,禁止调用刷新回调,除非之前的刷新已经结束。所以也许你可以做到。

如果你真的想要有多个刷新事件,那么我建议你取消订阅旧的刷新订阅,如果它存在,然后再创建一个新的。