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.
Более подробный разбор.