LifeCyle을 알고 있는 데이터 타입
- LifeCycle에 따라 데이터가 변경되는 시점에 맞추어 데이터를 변경 해줌
- Activity/Fragment가 start,resume 상태일때 작동
- Observer의 Callback으로 데이터를 변경 가능
- Rx나 Observer 패턴에 적용하여 사용하기 편리함
- Databinding 을 활용하여 사용하면 더욱 편리함
LiveData 형태
- MutableLiveData
- 변경할 수 있는 LiveData형
- UI Thread 와 Background Thread에서 선택적으로 사용 가능
- LiveData
- 변경할 수 없고 오로지 데이터의 변경값만을 소비
- MediatorLiveData
- 여러 LiveData를 한번에 처리 할 수 있음
- 일반적인 사용형태
//ViewModel에서의 LiveData사용 방법
class dataViewModel: ViewModel(){
private val _data = MutableLiveDta<T>()
val data :LiveData<T>
get() = _data
}
//ViewModel에서 선언한 LiveData를 Activity에서 사용할 때
class MainActivity():AppCompatActivity(){
override fun onCreate(savedInstacneState:Bundle?){
//조금전 ViewModel에서 post LiveData를 Observe합니다.
//첫번째 인자는 UI이며 해당 인자로 어떤 UI Thread를 사용할지 결정합니다.
//두번째는 Observe 콜백입니다.
dataViewModel.data.observe(this,
Observer{
data -> dataTitle.text = data?.title
}
)
}
}
//MediatorLiveData 사용 예제
val liveData1:LiveData = ...;
val liveData2: LiveData = ...;
val liveDataMerger:MediatorLiveData = new MediatorLiveData<>();
liveDataMerger.addSource(liveData1, value -> liveDataMerger.setValue(value));
liveDataMerger.addSource(liveData2, value -> liveDataMerger.setValue(value));
LiveData 콜백 실행 방법
- setValue
- UI Thread에서 동작
- postValue
- Background Thread에서 동작
LiveData 장점
- UI가 데이터 상태와 일치하는지 확인
- LiveData Observer는 수명주기 상태가 변경 될 때 개체에 알립니다 . 이러한 Observer객체 에서 UI를 업데이트하기 위해 코드를 통합 할 수 있습니다 . 앱 데이터가 변경 될 때마다 UI를 업데이트하는 대신 관찰자가 변경 사항이있을 때마다 UI를 업데이트 할 수 있습니다.
- 메모리 누출 없음
- LiveData는 LifeCycle에 바인딩되어 관련 LifeCycle이 destory되면 자체적으로 정리됩니다.
- 활동이 중지 되어도 충돌이 발생하지 않음
- 관찰자의 LifeCycle이 백 스택의 활동과 같이 비활성 인 경우 LiveData 이벤트를 수신하지 않습니다.
- 수동 수명주기 처리를 하지 않아도 됨
- LiveData는 관찰하는 동안 관련 수명주기 상태 변화를 인식하고 있기 때문에이 모든 것을 자동으로 관리합니다.
- 항상 최신 데이터
- 수명주기가 비활성 상태가되면 수명주기가 다시 활성화되면 최신 데이터를 수신합니다. 예를 들어 백그라운드에 있던 활동은 포 그라운드로 돌아온 직후에 최신 데이터를받습니다.
- 적절한 구성 변경
- 장치 순환과 같이 구성 변경으로 인해 활동 또는 단편이 다시 작성되면 즉시 사용 가능한 최신 데이터를 수신합니다.
- 리소스 공유
- LiveData 싱글 톤 패턴을 사용하여 객체를 확장하여 시스템 서비스를 래핑하여 응용 프로그램에서 공유 할 수 있습니다.
- 참고자료
https://developer.android.com/topic/libraries/architecture/livedata
LiveData Overview | Android Developers
Use LiveData to handle data in a lifecycle-aware fashion.
developer.android.com
Jetpack Android — LiveData 알아보기
LiveData? 특이한 이름입니다. 살아있는 데이터? 네이밍을 어떻게 한건지는 모르겠지만 LiveCycle을 알고있는 DataType이라고하면 더 와닿을것같습니다. 그러면 LiveCycle을 알면 뭐가 좋은데?라는 생각이 드는데 낄끼빠빠 바로…
medium.com
https://kaidroid.me/post/android-mvvm-viewmodel-livedata-databinding/
Android MVVM 패턴, ViewModel, LiveData, Databinding을 이용해 간단한 Toy App 만들기
Android MVVM, ViewModel, LiveData, Databinding의 개념설명과 예제 앱 구현
kaidroid.me
'Android > AAC(Android Architecture Component)' 카테고리의 다른 글
Paging Library 정리 (0) | 2019.07.03 |
---|---|
Room 정리 (0) | 2019.07.01 |