RxJava: Как возобновить работу наблюдаемого, если происходит изменение конфигурации?

Я работаю с RxJava и RxAndroid. Как возобновить работу observable, если происходит изменение конфигурации (ротация активности, смена языковой локали и т. д.)?

Мне нужно не только возобновить работу наблюдаемого, но и сохранить выданные элементы, когда подписчик отписался, и выдать все сохраненные элементы сразу после подписки.

Прочитал кучу статей, но ответа на свой вопрос так и не нашел.

Я нашел несколько примеров, но ни один из них не решает проблему:


person ArtKorchagin    schedule 29.07.2015    source источник


Ответы (3)


Вы можете использовать один из ConnectableObservables. В частности, cache или replay подойдет для такой ситуации.

Например, вы можете вызвать cache для своего наблюдаемого объекта, unsubscribe, когда активность будет уничтожена, и повторно подписаться на нее после воссоздания активности.

person Aaron He    schedule 29.07.2015

Я сделал демонстрационное приложение (https://github.com/pmellaaho/RxApp) для экспериментов. как поступать в подобных ситуациях. По сути, я использую одноэлементную модель из Activity, чтобы получить ответ от сети. Это позволяет кэшировать ответы, получать доступ к данным из нескольких компонентов пользовательского интерфейса, подписываться на ожидающие запросы, а также предоставлять фиктивные данные для автоматических тестов пользовательского интерфейса.

person pmellaaho    schedule 28.08.2015

Вы можете использовать OperatorFreeze из этой библиотеки для приостановки Observable при воссоздании активности. Вам нужно передать экземпляр этого оператора в метод Observable.lift(). Вам не нужно отписываться от Observables, когда вы используете постоянный Presenter.

person Maks Tuev    schedule 14.01.2018
comment
Пожалуйста, заявляйте, что являетесь владельцем ресурса при его размещении. См. раздел Как не стать спамером. - person LW001; 14.01.2018