Similar presentations:
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/