Android

Android) LiveData, MutableLiveData 특징과 차이점

가짜 개발자 2020. 8. 4. 16:00

 

Live data 
  • life cycle의 생명주기를 따릅니다.
  • LifecycleOwner의 상태가 STARTED RESUMED로 활성화 상태일 때만 옵저버에게 데이터 변화를 알려줍니다. 
  • 상태가 Destroyed 변경되면 자동으로 live data도 소멸 -> memory leak등의 문제 신경 안써도됩니다.
  • ViewModel에서 사용되도록 설계되었으므로 액티비티, 프래그먼트가 재실행해도 ViewModel은 소멸되지 않으므로 LiveData 또한 소멸 되지않습니다. 
  • 또한 life cycle이 활성화 되었을때만 데이터 변화 알려주므로 형식적인 코드(boiler plate)가 줄어듭니다.

 

MutableLiveData
  •  LiveData를 상속하고 LiveData.setValue LiveData.postValue를 구현한 클래스입니다.
  •  setValue : main thread에서 즉시 값 변경하고 옵저버로 데이터 변경 알려줍니다.
  •  postValue : Runnable로 데이터 변경 요청, Runnable이 실행될때 데이터 변경, background thread에서 값을 설정. Main thread에서 runnable이 실행되기전에 post value가 여러번 호출되도 마지막 변경된 값만 전달합니다.
더보기

 Rx java Observable 비슷한 느낌?

Rxjava에서는 정상적으로 코드가 돌아가게 보이지만, Observable은 안드로이드 컨텍스트를 복사하여 유지하므로

onError(), onComplete() 함수가 호출되면 내부적으로 unsubscribe() 함수를 유지합니다.

때문에 액티비티가 비정상적으로 종료되면 가비지 컬렉션의 대상이 되지못하여 메모리 누수가 발생합니다.

그래서 onCleared호출해서 메모리 누수를 방지해줘야하는 필요가 있습니다.

반응형