我编写代码从服务器获取数据并显示到列表视图。 而且我还添加了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吗?
答案 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,禁用调用刷新回调,除非之前的刷新已经结束。所以也许你可以做到。
如果您确实想要有多个刷新事件,那么我建议您在创建新刷新之前取消订阅旧刷新订阅。