Skip to content

Subjects ‐ Replay Subject

Devrath edited this page Dec 28, 2023 · 2 revisions
Screenshot 2023-12-28 at 9 31 15β€―PM

Code

class ReplaySubjectDemoVm @Inject constructor(context: Application) : AndroidViewModel(context) {

    private val disposable = CompositeDisposable()

    private val subject = ReplaySubject.create<String>(2)

    fun demo() {
        // Subscriber - 1
        subject.subscribeBy(
            onNext = { println("Subscriber-1:-> $it") },
            onError = { println("Subscriber-1:-> Error") },
            onComplete = { println("Subscriber-1:-> Complete") }
        ).addTo(disposable)

        subject.onNext(episodeI)

        // Subscriber - 2
        subject.subscribeBy(
            onNext = { println("Subscriber-2:-> $it") },
            onError = { println("Subscriber-2:-> Error") },
            onComplete = { println("Subscriber-2:-> Complete") }
        ).addTo(disposable)

        subject.onNext(episodeII)

        // Subscriber - 3
        subject.subscribeBy(
            onNext = { println("Subscriber-3:-> $it") },
            onError = { println("Subscriber-3:-> Error") },
            onComplete = { println("Subscriber-3:-> Complete") }
        ).addTo(disposable)

        subject.onNext(episodeIII)

        // Indicate onComplete of the publish subject
        subject.onComplete()
    }

    override fun onCleared() {
        super.onCleared()
        disposable.clear()
    }

}

Output

Subscriber-1:-> The Phantom Menace
Subscriber-2:-> The Phantom Menace
Subscriber-1:-> Attack of the Clones
Subscriber-2:-> Attack of the Clones
Subscriber-3:-> The Phantom Menace
Subscriber-3:-> Attack of the Clones
Subscriber-1:-> Revenge of the Sith
Subscriber-2:-> Revenge of the Sith
Subscriber-3:-> Revenge of the Sith
Subscriber-1:-> Complete
Subscriber-2:-> Complete
Subscriber-3:-> Complete

Observation

  • It is similar to behaviour subject but we can specify an optional size of the elements that can be emitted when new element is subscribed.
Clone this wiki locally