Я нашел несколько статей о том, как RxJava/RxAndroid может заменить шины событий (например, otto)
- https://lorentzos.com/rxjava-as-event-bus-the-right-way-10a36bdd49ba#.7a4619qva
- https://medium.com/mobiwise-blog/use-rxjava-instead-of-event-bus-libraries-aa78b5023097#.ew28h2urf
Цитата из первой статьи:
Отто из Square был официально объявлен устаревшим в предыдущие дни. В мире Android мы можем приветствовать что-то вроде «EventBusses мертвы, да здравствует RxJava».
Хотя есть одна вещь, которой мне не хватает:
Одним из преимуществ шин событий является то, что они очень помогают в жизненном цикле Activity, поскольку вам не нужно вручную управлять регистрацией/отменой регистрации для обратных вызовов (и, таким образом, легко избежать утечек памяти).
Пример потока:
- Activity подписывается на событие для получения песен (например, SongsAvailableEvent)
- Запрашиваем песни (делаем сетевой запрос)
- Мы меняем ориентацию устройства в середине запроса
- Активность умирает и создается новая, которая также подписана на событие SongsAvailableEvent.
- Новая активность получает событие и обновляет пользовательский интерфейс, а старая активность (которая теперь мертва) не получает событие (ура!)
В приведенных выше статьях создается впечатление, что этот поток «решен» RxAndroid/RxJava, но с помощью Rx вам все равно нужно подписываться/отписываться от Observable вручную, когда вы меняете ориентацию устройства. Более того, если я хочу «повторно использовать» запрос, сделанный в Observable, мне нужно каким-то образом сохранить его, чтобы я подписался на тот же Observable в новом Activity (я не совсем уверен, как это сделать, но это не в этом дело :) ).
Мой вопрос: легко ли решить эту проблему с помощью чистого RxAndroid/RxJava, или мне все еще нужно использовать Rx с шиной событий/расширить Rx, используя что-то вроде RxLifecycle (что усложняет ситуацию, поскольку я не управляю своими Observables на уровне представления)?