Сайт разработчика Александра Климова

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

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.2'

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

Были переименованы или удалены некоторые виды классов 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
  • Processor - подвид Subject с поддержкой BackPressure. AsyncProcessor, BehaviorProcessor, PublishProcessor, ReplayProcessor, UnicastProcessor.
  • Future
  • Single - ленивый эквивалент Future.
  • Consumer
  • Disposable - бывший Subscription из RxJava 1.x
  • Scheduler
  • Flowable

Observable и Observer

Существуют две сущности: производители и потребители (Observables и Observers). Общая идея состоит в реализации трёх задач - создать поток данных, привести данные в нужный вид, получить исправленные данные.

Первое знакомство. Observable и Observer

Операторы

В RxJava есть специальные операторы, с помощью которых можно создавать новые Observable или менять уже существующие. В Java операторы реализованы в виде методов. Как правило, названия оператора совпадает с именем метода или незначительно отличается наличием дополнительных префиксов или суффиксов.

Полная страница операторов в алфавитном порядке представлена в документации. Желательно самостоятельно пройтись по всем операторам, чтобы знать их возможности. Вдруг вам пригодится какой-то конкретный оператор для ваших задач. Мы рассмотрим только часть популярных операторов.

Также имеется интерактивная схема RxMarbles всех операторов, позволяющая двигать данные, чтобы увидеть работу оператора в действии. Схему ещё называет камешковыми диаграммами. Камешковые диаграммы иллюстрируют работу операторов. Как правило, диаграмма содержит две горизонтальные временные оси, направленные слева направо. Фигурки на диаграммах («камешки») служат для визуализации событий. Между осями располагается оператор, который изменяет последовательность событий, поступающих от исходного Observable и передаваемых в результирующий.

В большинстве случаев операторы выполняются синхронно. Вы создаёте цепочку из операторов и они последовательно выполняются.

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

Операторы создания Observable

Операторы трансформации и фильтрации

Другие классы

Scheduler

Flowable

Реклама