使用Reactive Android进行刷新时添加更多订阅

时间:2016-10-20 10:27:57

标签: java android reactivex

我编写代码从服务器获取数据并显示到列表视图。 而且我还添加了pull to refresh功能。 我想知道在调用pull to refresh时是否添加了更多订阅,这是最佳实践还是我应该在添加新版本之前取消订阅?

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

因此,如果结果1尚未完成且结果2在结果1之前完成,那么列表数据将显示错误? (显示结果1,但应显示结果2) 我应该在添加新订阅之前清除订阅1吗?

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:1)

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

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

如果您确实想要有多个刷新事件,那么我建议您在创建新刷新之前取消订阅旧刷新订阅。