MutableLiveData를 RxStream으로 변환하려는 이유는?
val <E> MutableLiveData<E>.rx: Observable<E>
get() {
return Observable.create { emitter ->
if (!emitter.isDisposed && value != null) {
emitter.onNext(value!!)
}
val observer: Observer<E> = Observer {
if (!emitter.isDisposed && value != null) {
emitter.onNext(value!!)
}
}
this.observeForever(observer)
emitter.setCancellable {
this.removeObserver(observer)
}
}
}
MutableLiveData의 확장 프로퍼티를 만들어서 Observable로 반환한다.
emitter가 해제되지 않았거나 value가 null이 아니면 onNext로 현재 값을 발행한다. 이 발행된 값을 MutableLiveData가 수신할려면 옵저버를 등록해야하고 메모리 누수를 막기 위해 꼭 해제도 해주어야한다.
class MovieViewModel {
private val _searchText: NotNullMutableLiveData<String> = NotNullMutableLiveData(movieRepository.latestMovieQuery)
val searchText: MutableLiveData<String>
get() = _searchText
init {
val query = _searchText.rx
.toFlowable(BackpressureStrategy.DROP)
}
}