Skip to content

Subjects ‐ Behaviour Subject

Devrath edited this page Dec 28, 2023 · 2 revisions
S PublishSubject

Code

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

    private val disposable = CompositeDisposable()

    private val subject = BehaviorSubject.create<String>()


    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()

        // Try to publish a new onNext event
        //subject.onNext(episodeIII)

    }


    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:-> 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

  • Observe that when the new subscriber joins in it gets the latest subscription that was earlier emitted.
  • Now when an emission is done, all the subscribers get the new emission.
Clone this wiki locally