2017-02-12 14 views
1

Есть ли элегантный способ обработки подписки на RxJava при работе с изменениями состояния Android (например, изменение ориентации) или событиями асинхронной платформы (например, события push-уведомления) и т. Д.?Обработка подписки на RxJava на Android элегантно?

Я использую EventBus для обработки таких вещей до сих пор и хотел бы полностью переходить к RxJava (без необходимости в EventBus), но почему-то архитектура EventBus кажется намного приятнее (просто зарегистрируйтесь и отменить регистрацию по мере необходимости) для обработки этих сценариев, особенно при работе с событиями платформы Android.

С только RxJava кажется нам еще нужен способ сохраняющиеся подписки за пределы жизненного цикла фрагмента/активности (либо с Погрузчики, Нераспределенная фрагменты, кэш Application и т.п. есть какие-либо другие?) все из которых, похоже, чувствуют себя немного дополнительной работой и обработкой.

+0

как шина события разрешает это элегантно? – yosriz

ответ

0

Использование CompositeSubscription

Вот некоторые примеры:

private CompositeSubscription subscriptions = new CompositeSubscrition(); 

public void someSubscribe() { 
    subscriptions.add(Observable.just(null).subscribe(someNull -> doSmth()) 
} 

@Override 
public void onPause() { 
    subscriptions.clear() //Here all subscriptions, that were added to composite subscription, will unsubscribe 
    super.onPause() 
} 
+0

Я не думаю, что CompositeSubscriptions - это жизненный цикл, знаете ли они? Или вы могли бы объяснить, как они работают в описанных выше сценариях (асинхронные события или изменения конфигурации и т. Д.)? –

0

Вы можете заменить EventBus с шиной-на-RX. Затем вы должны использовать Singleton Subjects для публикации событий. В этом случае вам не нужно сохранять подписки, потому что субъекты являются «горячими» наблюдателями. Это означает, что вы можете подписаться на него/отказаться от него в любое время, и он все равно сможет создавать события. Что происходит в момент (пере) подписки, определяется Subject type.

Если вы хотите полностью уйти от архитектуры, основанной на событиях-шинах, то принимайте тот факт, что нет никакой «серебряной пули» для сохранения наблюдаемых объектов (или любых других объектов) между изменениями конфигурации. Вы можете использовать сохраненные фрагменты, загрузчики, сохраненные презентаторы, синглтоны, некоторые библиотеки и т. Д. Это зависит от конкретного случая и ваших личных предпочтений.

 Смежные вопросы

  • Нет связанных вопросов^_^