본문 바로가기

Android/AAC(Android Architecture Component)

LiveData 정리

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

https://medium.com/harrythegreat/jetpack-android-livedata-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0-ed49a6f17de3

 

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