Я использую Retrofit 2 с RxAndroid, и я хочу сохранить запрос во время изменения конфигурации. Я думал, что смогу сделать это с Observable.cache()
, как описано в this blog post и другими, которые я видел, но следующий поток вызывает InterruptedException
.Возможно ли повторная подписка на Retrofit 2?
Observable<Result<List<Post>>> request =
postService.index(page).cache();
Subscription subscribeOne = request.subscribe();
subscribeOne.unsubscribe();
Subscription subscribeTwo = request.subscribe();
Я уверен, что следующий код в источнике Retrofit отвечает за отмену запроса, когда unsubscribe
называется.
// Attempt to cancel the call if it is still in-flight on unsubscription.
subscriber.add(Subscriptions.create(new Action0() {
@Override public void call() {
call.cancel();
}
}));
Отказ от подписки заставляет все работать, но это может привести к утечкам. Кто-нибудь смог обработать изменения конфигурации с помощью Retrofit 2? Есть ли другой подход, который я могу использовать?
Было бы интересно посмотреть, как это происходит в контексте деятельности, учитывая потенциальные утечки памяти, необходимость сохранения объекта/наблюдаемого после разрушения активности и т. Д. – AndroidEx
Я действительно экспериментирую на этом этапе, но у меня есть сохранившийся фрагмент с «WeakHashMap» докладчиков. При закрытии операции субъект отписывается, а докладчики - GC'd. Тем не менее, я не думаю, что пользователь, возвращающийся во время запроса, отменит запрос. Какой-то код останова в 'onDestroy()' сохраненного фрагмента может быть частью решения. – Jimeux