[Android/Kotlin] LiveData

[Android/Kotlin] LiveData

LiveData(Developer)

📌 LiveData

  • 관찰 가능한 데이터 홀더 클래스
  • 일반 클래스와 달리 LiveData는 생명 주기를 인식, Acitivty, Fragment, Service 등 다른 앱 구성요소의 수명 주기를 고려
  • 생명 주기 인식을 통해 LiveData는 활동 수명 주기 상태에 있는 앱 구성요소 observer(관찰자)만 업데이트

생명주기

Observer 클래스로 표현되는 관찰자의 수명 주기가 STARTED 또는 RESUMED 상태이면 LiveData는 관찰자를 활성 상태로 간주한다.

⭐️ 화면이 살아있을 때만 Observing이 활성화 되고 화면이 죽었을때는 Observing이 활성화 되지 않는다. ⭐️

LiveData는 활성 관찰자에게만 업데이트 정보를 알린다. LiveData 객체를 보기 위해 등록된 비활성 관찰자는 변경사항에 관한 알림을 받지 않는다.

주요 이점

⭐️ LiveData는 사용되지 않을 때 자동으로 observing을 해제했다가 사용될 때 다시 observe한다. ⭐️

  • 따라서 불필요한 observing이 사라지고 이로인해 메모리 누수의 위험이 사라진다.
    • 생명주기와 연결되며 DESTROYED 시점에 자동 삭제함
  • 생명 주기를 더 이상 수동으로 처리하지 않음
  • 최신 데이터 유지 (UI와 데이터 상태 일치 보장)
    • 생명 주기가 비활성화 > 다시 활성화될 때 최신 데이터를 수심함

사용방법 예시

class NameViewModel : ViewModel() {

		private val _list: MutableLiveData<...> = MutableLiveData()
    val list: LiveData<...> get() = _list

		private fun load() {
				_list.value = listOf(...)
		}
}
class NameActivity : AppCompatActivity() {

    private val viewModel: NameViewModel by viewModels()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        viewModel.list.observe(this) { list ->
					 ...
				}
    }
}

class NameFragment : Fragment() {

    private val viewModel: NameViewModel by viewModels()

		override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
			
				viewModel.list.observe(viewLifecycleOwner) { list ->
					 ...
				}
    }
}


© 2023. All rights reserved.

by SoftyChoo