База знаний

RxJava

RxJava

В последнее время очень многие восторгаются новым способом написания приложений, которое называют реактивным программированием. Докатилось и до Android. Попытаемся разобраться в этой теме.

Общая страница по реактивному программированию — http://reactivex.io/. Документация по классам здесь.

Домашняя страница на GitHub для RxJava — https://github.com/ReactiveX/RxJava.

Следует помнить, что компания Google официально не поддерживает это направление. Но некоторые программисты из компании используют реактивное программирование в своих собственных проектах. Один из них даже написал свой вариант библиотеки, схожий с RxJava, который использовался в одном из приложений Google.

Переход на RxJava 2

С некоторых пор произошло разделение версии на две ветки: 1.x и 2.x.

Ветка 1.x была заморожена 1 июня 2017 (только исправления багов). 31 марта 2018 года ветку закроют. Я начинал изучать тему на основе 1.x-ветки, поэтому не удивляйтесь, если будут попадаться старые примеры для первой версии. Постараюсь явно предупреждать о подобных случаях, так как различия довольны значительны.

Подключаем RxJava.

// Старый способ

compile ‘io.reactivex:rxjava:1.2.7’

Для ветки 2.x имя пакета изменилось, чтобы не было конфликтов.

// Новый способ

compile ‘io.reactivex.rxjava2:rxjava:2.1.6’

Разница между двумя ветками описана на сайте документации. Общие фундаментальные понятия остались прежними.

Были переименованы или удалены некоторые виды классов Action и Function.

  • Action0 -> Action
  • Action1 -> Consumer
  • Action2 -> BiConsumer
  • ActionN -> Consumer<Object[]>
  • Action3 — Action9 -> удалены
  • Func0 -> Callable
  • Func1 -> Function
  • Func2 -> BiFunction
  • Func3 — Func9 -> Function3 — Function9

Subscriber переименован в Disposable. А также CompositeSubscription в CompositeDisposable.

Классы

В RxJava огромное количество страшных слов, которые следует выучить.

  • Observable
  • Observer
  • Subject, а также PublishSubject, AsyncSubject, BehaviorSubject, ReplaySubject
  • Processor — подвид Subject с поддержкой BackPressure. AsyncProcessor, BehaviorProcessor, PublishProcessor, ReplayProcessor, UnicastProcessor.
  • Future
  • Single — ленивый эквивалент Future.
  • Maybe
  • Completable
  • Consumer
  • Disposable — бывший Subscription из RxJava 1.x
  • Scheduler
  • Flowable