Эта статья полностью посвящена теме, доступной в RxJava.
- Тема публикации
- Тема воспроизведения
- Субъект Поведения
- Асинхронный субъект
Поскольку у нас уже есть пример проекта, основанного на RxJava 2, для изучения RxJava (многие разработчики извлекли уроки из этого примера проекта), Поэтому я включил тематические примеры в один и тот же проект. Разветвляйте, клонируйте, создавайте, запускайте и изучайте RxJava.
Проверьте это здесь
Итак, давайте подробнее рассмотрим этот предмет.
Что такое Предмет?
Субъект – это своего рода мост или прокси-сервер, доступный в некоторых реализациях ReactiveX, который действует как наблюдатель, так и как Наблюдаемый. Поскольку он является наблюдателем, он может подписаться на один или несколько Наблюдаемых объектов, а поскольку он является Наблюдаемым, он может проходить через наблюдаемые элементы, повторно испуская их, а также может испускать новые элементы.
Я считаю: обучение на примерах – лучший способ учиться.
Наблюдаемый: Предположим, что профессор является наблюдаемым. Профессор преподает какую-то тему.
Наблюдатель: Предположим, что студент является наблюдателем. Студент наблюдает за темой, которую преподает профессор.
Тема публикации
Он испускает все последующие элементы источника, наблюдаемые во время подписки.
Здесь, если ученик поздно вошел в класс, он просто хочет слушать с того момента, когда он вошел в класс. Таким образом, публикация будет лучшей для этого варианта использования.
Смотрите приведенный ниже пример:
PublishSubjectsource = PublishSubject.create(); // It will get 1, 2, 3, 4 and onComplete source.subscribe(getFirstObserver()); source.onNext(1); source.onNext(2); source.onNext(3); // It will get 4 and onComplete for second observer also. source.subscribe(getSecondObserver()); source.onNext(4); source.onComplete();
Ознакомьтесь с полным примером здесь.
Тема воспроизведения
Он излучает все наблюдаемые элементы источника, независимо от того, когда подписчик подписывается.
Здесь, если ученик поздно вошел в класс, он хочет слушать с самого начала. Итак, здесь мы будем использовать повтор для достижения этой цели.
Смотрите приведенный ниже пример:
ReplaySubjectsource = ReplaySubject.create(); // It will get 1, 2, 3, 4 source.subscribe(getFirstObserver()); source.onNext(1); source.onNext(2); source.onNext(3); source.onNext(4); source.onComplete(); // It will also get 1, 2, 3, 4 as we have used replay Subject source.subscribe(getSecondObserver());
Ознакомьтесь с полным примером здесь.
Субъект Поведения
Он испускает самый последний испущенный элемент и все последующие элементы наблюдаемого источника, когда наблюдатель подписывается на него.
Здесь, если студент поздно пришел в класс, он хочет прослушать самые последние вещи (не с самого начала), которые преподает профессор, чтобы получить представление о контексте. Итак, здесь мы будем использовать Поведение.
Смотрите приведенный ниже пример:
BehaviorSubjectsource = BehaviorSubject.create(); // It will get 1, 2, 3, 4 and onComplete source.subscribe(getFirstObserver()); source.onNext(1); source.onNext(2); source.onNext(3); // It will get 3(last emitted)and 4(subsequent item) and onComplete source.subscribe(getSecondObserver()); source.onNext(4); source.onComplete();
Ознакомьтесь с полным примером здесь.
Асинхронный субъект
Он выдает только последнее значение наблюдаемого источника (и только последнее значение).
Здесь, если ученик вошел в любой момент времени в класс, и он хочет слушать только о последнем (и только о последнем), чему его учат. Итак, здесь мы будем использовать асинхронность.
Смотрите приведенный ниже пример:
AsyncSubjectsource = AsyncSubject.create(); // It will get only 4 and onComplete source.subscribe(getFirstObserver()); source.onNext(1); source.onNext(2); source.onNext(3); // It will also get only get 4 and onComplete source.subscribe(getSecondObserver()); source.onNext(4); source.onComplete();
Ознакомьтесь с полным примером здесь.
Итак, всякий раз, когда вы сталкиваетесь с подобными случаями, тема RxJava будет вашим лучшим другом.
Счастливого кодирования:)
Амит Шекхар, Разум работает | |/После Академии | |/Любопытный
Первоначально опубликовано на Разум работает .
Оригинал: “https://dev.to/amitiitbhu/understanding-rxjava-subjectpublish-replay-behavior-and-async-subject”