Функциональное реактивное программирование (FRP)
Что такое поток данных?
Ввод текста как поток данных
RxJava
Паттерн Observer
Поток данных
Создаем поток данных
Подписываемся на поток данных
Подписываемся на поток данных
Почему Observable, а не for?
Rx vs for
Rx vs for
Observable.from
Observable.create
Observable.create
Observable.create
Observable.fromCallable
Observable. Создание последовательности
subscribeOn и observeOn
Schedulers
Transformer
Transformer
Transformer
Transformer
Observable.map
Observable.map
Observable.filter
Observable.skip
Observable.take
Observable.concat
Observable.concat
Observable.merge
Observable.merge
Observable.zip
Observable.zip
Observable.zip
Observable.flatMap
Observable.flatMap
RxJava в Android
RxJava в Retrofit
RxJava в Retrofit
Реактивный запрос на сервер
Отображение процесса загрузки
Other Utility Operators
Кэшируем данные
Возвращаем закэшированнные данные в случае ошибки
Кэшируем запросы
Проблема Backpressure
Observable.sample
Observable.sample
Observable.debounce
Observable.buffer
Observable.buffer
RxJava2
Single.just
Single.concat
Single.merge
Single.map
Single.flatMap
Single.zip
Single
Completable
Maybe
Maybe.fromAction
Dispose
Dispose
Полезные ссылки
4.22M
Category: programmingprogramming

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

1.

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

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

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

a) Любые объекты и примитивы
b) Любая последовательность объектов и примитивов
c) Бесконечные последовательности
d) Любое событие (ввод текста, клик на кнопку и так далее)

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

5. RxJava

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

6. Паттерн Observer

7. Поток данных

8.

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

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

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

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

13. Rx vs for

14. Rx vs for

15. Observable.from

16. Observable.create

17. Observable.create

18. Observable.create

19. Observable.fromCallable

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

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


Observable.empty вернет только onCompleted
Observable.error вернет только onError
Observable.never ничего не вернет
values.subscribe(
val -> System.out.println("Received: " + val),
error -> System.out.println("Error: " + error),
() -> System.out.println("Completed")
);

21. subscribeOn и observeOn

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

22. Schedulers

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

23. Transformer

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

24. Transformer

25. Transformer

26. Transformer

27. Observable.map

28. Observable.map

29. Observable.filter

30. Observable.skip

31. Observable.take

32. Observable.concat

33. Observable.concat

34. Observable.merge

35. Observable.merge

36. Observable.zip

37. Observable.zip

38. Observable.zip

39. Observable.flatMap

40. Observable.flatMap

41. RxJava в Android

1) Использование RxJava в Android не ограничено
2) Поддержка RxJava в Retrofit
3) Реализация стандартных для Android подходов в реактивном
стиле: RxBindings, RxLifecycle и множество других

42. RxJava в Retrofit

43. RxJava в Retrofit

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

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

46. Other Utility Operators


doOnEach – register an action to take whenever an Observable 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

51. Observable.sample

52. Observable.sample

53. Observable.debounce

54. Observable.buffer

55. Observable.buffer

56. RxJava2

57. Single.just

58. Single.concat

59. Single.merge

60. Single.map

61. Single.flatMap

62. Single.zip

63. Single

64. Completable

65. Maybe

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”));

67. Dispose

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

68. Dispose

69. Полезные ссылки


http://reactivex.io/documentation/
http://reactivex.io/tutorials.html
https://github.com/ReactiveX/RxJava
https://github.com/JakeWharton/RxBinding
https://habrahabr.ru/post/265269/
https://habrahabr.ru/company/badoo/blog/328434/
English     Русский Rules