Зачем нужен RxJava в Android?

228
12 октября 2017, 09:49

В хабре вычитал кучу уроков и статьей по RX. Все приводят прмиеры с проблемным asyncTaskom который может не правильно запрос обработать и null выдать или еще чего. Дак для этого нужно exception нужно обрабатывать. А насчет запросов Retrofit же есть. Ну ни как не пойму полезность RXJava. Зачем он нужен вообще?

Answer 1

RxJava - это библиотека, которая реализует реактивный подход к программированию. Что такое реактивное программирование можно почитать на сайте проекта ReactiveX API.

ReactiveX is a combination of the best ideas from the Observer pattern, the Iterator pattern, and functional programming

ReactiveX - это комбинация лучших идей шаблонов проектирования Наблюдатель и Итератор и функционального программирования.

Если совсем простыми словами, то это подход при котором вы оперируете событиями и потоками данных. Т.е. вместо "запустили и ждем результат" или "как отработает надо запустить callback и передать в него результат" вы говорите "Вот тебе труба, сиди и смотри на нее. Как только в нее посыпятся данные - обработай их, а я пошел дальше".

Большей частью такой подход полезен для создании асинхронных приложений и изничтожения callback hell'а.

Если совсем грубо, то у вас появляются такие сущности как Observer(наблюдатель) и Observable(наблюдаемое). Наблюдатель наблюдает за наблюдаемым и, когда из наблюдаемого посыпались события(объекты) - производит с потоком этих событий какие либо действия. В частности никто не мешает ему быть "Наблюдаемым" для другого "наблюдателя" например.

Представьте себе длинную комнату с множеством стоящих рядом коробок(наблюдаемое). У каждой коробки стоит рабочий(наблюдатель) и, как только ему в коробку упал объект - он берет его, что-то с ним делает, кладет в следующую по очереди коробку и берет следующий объект. Самый цимус в том, что разные этапы обработки не завязаны друг на друга, т.е. все рабочие работают одновременно - пока последний обрабатывает объект №1, который прошел уже почти весь конвейер, рабочий из середины работает с объектом №5, а первый рабочий уже стоит курит и ждет, когда из дыры в стене повалят новые объекты.

Answer 2

Java своим синтаксисом не позволяет использовать паттерны реактивного программирования. RxJava позволяет писать программы в реактивном стиле

READ ALSO
Как в IntelliJ IDEA открыть декомпилированный байт-код?

Как в IntelliJ IDEA открыть декомпилированный байт-код?

Оказывается, можно сделать такую удивительную магию как:

220
Проблема при проверки на число

Проблема при проверки на число

Создал консольный калькулятор, когда ввожу число ошибка NumberFormatException

252