A Summary of Hot and Cold Observables in RxJava
Hot and Cold are two types of Observables in RxJava. Choosing between them wisely can help you write your code more effectively!
In RxJava, Hot and Cold Observables are crucial concepts to grasp for successful reactive programming. This post provides a brief summary that can assist you in remembering the distinction between the two and utilizing them wisely.
Cold Observable:
It starts emitting data only when a subscriber subscribes to it.
Each subscriber receives the data independently, starting from scratch.
Example: Data streams from Database queries or reading from files.
val coldObservable: Observable<Int> = Observable.create(emitter -> {
emitter.onNext(0)
emitter.onNext(1)
emitter.onNext(2)
emitter.onComplete()
})
coldObservable.subscribe(value -> println("Subscriber 1: " + value))
coldObservable.subscribe(value -> println("Subscriber 2: " + value))
Hot Observable:
It emits data regardless of whether there is a subscriber or not.
Subscribers just join a data stream and may miss some early data
Example: Like a live stream, the latecomers may miss some parts of the show!
val hotObservable: Subject<Int> = PublishSubject.create()
hotObservable.onNext(0)
hotObservable.subscribe(value -> println("Subscriber 1: " + value)
hotObservable.onNext(1)
hotObservable.onNext(2)
hotObservable.subscribe(value -> println("Subscriber 2: " + value)
hotObservable.onNext(4)
hotObservable.onNext(5)
In summary, Cold Observables provide an isolated, independent data stream for each subscriber. Hot Observables broadcast the data to all subscribers in real time.
According to your real use cases, choose it wisely!