#java #android #reactivex
#java #Android #reactivex
Вопрос:
Я написал код для получения данных с сервера и отображения в виде списка. И я также добавляю функцию извлечения для обновления. Интересно, добавим ли мы дополнительную подписку при вызове 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 перед добавлением новой?
Ответ №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. Спасибо. Я попробую с SerialSubscription
Ответ №2:
Что касается вашей первой подписки, то при загрузке ваших данных и вызове метода onComplete() эта подписка автоматически отменяется.
Что касается извлечения для обновления, я не знаю, как вы это реализуете, но, например, Android RefreshLayout отключает вызов обратного вызова обновления, если только предыдущее обновление не завершилось. Так что, возможно, вы сможете это сделать.
Если вы действительно хотите иметь несколько событий обновления, тогда я предлагаю вам отказаться от старой подписки на обновление, если она существует, прежде чем создавать новую.
Комментарии:
1. да, я знаю, что мы можем отменить старую обновляющую подписку, если она существует, прежде чем создавать новую. Но я думаю, что у этого может быть другой способ, лучший способ справиться с этим случаем. Итак, я хочу разобраться.
2. Я думаю, что лучшим способом было бы не перекрывать обновление, потому что насколько второй запрос на обновление будет отличаться от первого? поскольку они разделены менее чем на секунды — предполагая, что ваш запрос на обновление занимает полные секунды-
3. да, я согласился с вами по этому поводу.