Подтвердить что ты не робот

Если вызов onComplete выполняется для объекта RxJava, мне нужно снова отменить подписку?

Я использую RxJava ReplaySubject в своем фрагменте.

Я пытаюсь использовать ReplaySubject таким образом, где бы я хотел, чтобы Subject выполнил процесс до завершения (возможно, вне жизни фрагмента).

По завершении процесса я хотел бы освободить ресурсы, которые, как я понимаю, выполняется, отменяя подписку на момент регистрации наблюдателя (что в моем случае является самим объектом).

В этом потоке ответов github @benjchristensen говорит:

Если это наблюдаемый, тогда он должен испускать onCompleted и выполняться.

Если это Наблюдатель, тогда он должен отказаться от подписки, полученной Подпиской, когда он назвал Observable.subscribe, и это даст Наблюдателю шанс завершить работу и очистить.

Если это Субъект, который является Наблюдателем и Наблюдаемым - что такое поведение? Если я вызываю onComplete по этому вопросу, это в основном означает, что подписка прекращена, и поэтому я освобождаюсь от необходимости вручную отменить подписку, которую я получаю, зарегистрировав наблюдателя?

4b9b3361

Ответ 1

Субъекты представляют собой относительно тонкий слой поверх наблюдаемого, который позволяет отправлять вызовы onNext(), onCompleted() и onError() из внешнего источника Observable. Их поведение отписки - это то же самое, что и Observable. Если в теме будут вызывать onCompleted() или onError(), подписчики будут отписаны. Не нужно вызывать unsubscribe() в подписке, возвращенной из Observable.subscribe().

При a ReplaySubject обратите внимание, что ресурсы не будут очищены до сбора мусора. Даже после того, как onCompleted() был вызван на ReplaySubject, абонент все равно может подписаться, и он получит все оригинальные вызовы onNext(), onCompleted() или onError(), которые были сделаны до подписания.