RxJava. Функциональное реактивное программирование (FRP)

Содержание

Слайд 2

Функциональное реактивное программирование (FRP)

Функциональное. Основной элемент – функции.
Реактивное. Программирование с асинхронными потоками

Функциональное реактивное программирование (FRP) Функциональное. Основной элемент – функции. Реактивное. Программирование с
данных.
Функциональное реактивное программирование – программирование с асинхронными потоками данных, которые манипулируются с помощью различных функций.

Слайд 3

Что такое поток данных?

Любые объекты и примитивы
Любая последовательность объектов и примитивов
Бесконечные последовательности
Любое

Что такое поток данных? Любые объекты и примитивы Любая последовательность объектов и
событие (ввод текста, клик на кнопку и так далее)

Слайд 4

Ввод текста как поток данных

Ввод текста как поток данных

Слайд 5

RxJava

Обеспечение многопоточности
Управление потоками данных
Обработка ошибок
Красивый и компактный код (при использовании лямбда-выражений)

RxJava Обеспечение многопоточности Управление потоками данных Обработка ошибок Красивый и компактный код (при использовании лямбда-выражений)

Слайд 6

Паттерн Observer

Паттерн Observer

Слайд 7

Поток данных

Поток данных

Слайд 9

Создаем поток данных

Создаем поток данных

Слайд 10

Подписываемся на поток данных

Подписываемся на поток данных

Слайд 11

Подписываемся на поток данных

Подписываемся на поток данных

Слайд 12

Почему Observable, а не for?

Почему Observable, а не for?

Слайд 13

Rx vs for

Rx vs for

Слайд 14

Rx vs for

Rx vs for

Слайд 15

Observable.from

Observable.from

Слайд 16

Observable.create

Observable.create

Слайд 17

Observable.create

Observable.create

Слайд 18

Observable.create

Observable.create

Слайд 19

Observable.fromCallable

Observable.fromCallable(() -> getUserIdsFromDatabase());

Observable.fromCallable Observable.fromCallable(() -> getUserIdsFromDatabase());

Слайд 20

Observable. Создание последовательности

Observable.empty вернет только onCompleted
Observable.error вернет только onError
Observable.never ничего не вернет
values.subscribe(

Observable. Создание последовательности Observable.empty вернет только onCompleted Observable.error вернет только onError Observable.never

val -> System.out.println("Received: " + val),
error -> System.out.println("Error: " + error),
() -> System.out.println("Completed")
);

Слайд 21

subscribeOn и observeOn

Код подписчика (observer) выполняется в потоке, переданном в observeOn
Код потока

subscribeOn и observeOn Код подписчика (observer) выполняется в потоке, переданном в observeOn
данных выполняется в потоке, переданном в subscribeOn

Слайд 22

Schedulers

Schedulers.io() – выполнение задач, которые не сильно нагружают процессор, но являются долгими:

Schedulers Schedulers.io() – выполнение задач, которые не сильно нагружают процессор, но являются
сетевые запросы, база данных
Schedulers.computation() – тяжелые вычислительные задачи, нагружающие CPU
Schedulers.newThread – новый поток для каждой новой задачи
Schedulers.immediate() – выполнение задачи в том же потоке
AndroidScheduler.mainThread() (RxAndroid) – главный поток Android-приложения

Слайд 23

Transformer

Одинаковый код для каждого сетевого запроса

Transformer Одинаковый код для каждого сетевого запроса

Слайд 24

Transformer

Transformer

Слайд 25

Transformer

Transformer

Слайд 26

Transformer

Transformer

Слайд 27

Observable.map

Observable.map

Слайд 28

Observable.map

Observable.map

Слайд 29

Observable.filter

Observable.filter

Слайд 30

Observable.skip

Observable.skip

Слайд 31

Observable.take

Observable.take

Слайд 32

Observable.concat

Observable.concat

Слайд 33

Observable.concat

Observable.concat

Слайд 34

Observable.merge

Observable.merge

Слайд 35

Observable.merge

Observable.merge

Слайд 36

Observable.zip

Observable.zip

Слайд 37

Observable.zip

Observable.zip

Слайд 38

Observable.zip

Observable.zip

Слайд 39

Observable.flatMap

Observable.flatMap

Слайд 40

Observable.flatMap

Observable.flatMap

Слайд 41

RxJava в Android

Использование RxJava в Android не ограничено
Поддержка RxJava в Retrofit
Реализация стандартных

RxJava в Android Использование RxJava в Android не ограничено Поддержка RxJava в
для Android подходов в реактивном стиле: RxBindings, RxLifecycle и множество других

Слайд 42

RxJava в Retrofit

RxJava в Retrofit

Слайд 43

RxJava в Retrofit

RxJava в Retrofit

Слайд 44

Реактивный запрос на сервер

Реактивный запрос на сервер

Слайд 45

Отображение процесса загрузки

Отображение процесса загрузки

Слайд 46

Other Utility Operators

doOnEach – register an action to take whenever an Observable

Other Utility Operators doOnEach – register an action to take whenever an
emits an item
doOnCompleted – register an action to take when an Observable completes successfully
doOnError – register an action to take when an Observable completes with an error
doAfterTerminate – register an action to call just after an Observable terminated, either successfully or with an error
doFinally - register an action to call when an Observable terminates or it gets disposed

Слайд 47

Кэшируем данные

Кэшируем данные

Слайд 48

Возвращаем закэшированнные данные в случае ошибки

Возвращаем закэшированнные данные в случае ошибки

Слайд 49

Кэшируем запросы

Кэшируем запросы

Слайд 50

Проблема Backpressure

Проблема Backpressure

Слайд 51

Observable.sample

Observable.sample

Слайд 52

Observable.sample

Observable.sample

Слайд 53

Observable.debounce

Observable.debounce

Слайд 54

Observable.buffer

Observable.buffer

Слайд 55

Observable.buffer

Observable.buffer

Слайд 57

Single.just

Single.just

Слайд 58

Single.concat

Single.concat

Слайд 59

Single.merge

Single.merge

Слайд 60

Single.map

Single.map

Слайд 61

Single.flatMap

Single.flatMap

Слайд 62

Single.zip

Single.zip

Слайд 64

Completable

Completable

Слайд 66

Maybe.fromAction

Maybe.fromAction(()-> System.out.println(“Hello”));
Maybe.fromRunnable(()-> System.out.println(“Hello”));
Completable.fromAction(()-> System.out.println(“Hello”));
Completable.fromRunnable(()-> System.out.println(“Hello”));

Maybe.fromAction Maybe.fromAction(()-> System.out.println(“Hello”)); Maybe.fromRunnable(()-> System.out.println(“Hello”)); Completable.fromAction(()-> System.out.println(“Hello”)); Completable.fromRunnable(()-> System.out.println(“Hello”));

Слайд 67

Dispose

.subscribe – возвращает объект Disposable, который хранит состояние подписки на текущий момент.
Содержит

Dispose .subscribe – возвращает объект Disposable, который хранит состояние подписки на текущий
два метода:
isDisposed() – освобождены ли ресурсы
dispose() – освободить ресурсы(отписаться)
В методе onDestroy() всегда стоит вызывать метод dispose()