Subject
– это абстрактный класс в RxJava, одновременно расширяющий класс Observable
и реализующий интерфейс Observer
. Subject
– это hot observable.В RxJava есть следующие реализации
Subject
:Publish Subject. Подписчики
PublishSubject
получают только те элементы, которые отправляются после момента подписки. PublishSubject
не кэширует и не рассылает прошлые элементы.BehaviorSubject отправляет каждому новому подписчику элемент, который был разослан до подписки, и все последующие элементы.
AsyncSubject. Подписчики получают только последний элемент, который был отправлен перед вызовом
onComplete()
.ReplaySubject. По-умолчанию каждый новый подписчик получает все элементы, которые были отправлены до подписки, и все последующие элементы.
Если
ReplaySubject
создается фабричным методом createWithSize(size: Int)
, то подписчики будут получать только заданное количество элементов, отправленных в прошлом.UnicastSubject работает также как
ReplaySubject
, но может иметь только одного подписчика. Все последующие подписчики получают onError()
с IllegalStateException
.Более подробный разбор.