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