RxJava, поворот экрана, и сетевой запрос в Android
Начинаю изучать RxJava и интересует вопрос, а именно следующая ситуация, например я делаю сетевой запрос, он занимает несколько секунд, и в этот момент я делаю поворот экрана. Что произойдет с данными? Куда они придут? Получу я их во вновь созданной активити после поворота? Отслеживает ли RxJava жизненный цикл активити как например Livedata? И как правильно тогда обработать результат запроса? Буду благодарен за любую помощь
Ответы (2 шт):
RxJava никак не связана с жизненным циклом компонентов андроид приложений. Она даже сделана изначально для Java, не для андроид. И, например, AndroidSchedullers.mainThread() не находится внутри стандартной библиотеки.
С данными может всякое произойти - зависит от того как и что вы с ними делаете. Вы можете как утечку памяти получить, так и данные в пересозданной активити.
Обычно задачу переживания пересоздания активити решают с помощью архитектурных библиотек, в которых результаты запросов приходят в экземпляры специальных классов, не умирающих вместе с активити и передающих в пересозданную активити данные, когда она к этому будет готова. При этом будет не важно как вы получаете данные - через rxJava, в AsyncTask, Thread, Retrofit, OkHttp.
В качестве послених можете посмотреть на RxPm или Moxy.
Изучите паттерны, к примеру MVVM,MVP Moxy.
Один из примеров реализации MVVM к вашему вопросу:
ВViewModel мы создаем LiveData или Subject's из RxJava 2, в onResume() Activity/Fragment мы подписываемся на LiveData или Subject которые берем из ViewModel, но если решились использовать Subject's то не забудьте их отписать, к примеру в onStop() Activity/Fragment.. Все запросы в сеть с помощью RxJava мы делаем внутри ViewModel, а когда в subscribe() мы получаем данные которые надо передать в Activity/Fragment то мы используем LiveData или Subject. И в ViewModel не забудьте отписаться от всех Observable, обычно это делают в методе onCleared().