Flow로 LiveData를 어떻게 대체할 수 있을까?
Flow와 LiveData의 차이점
- Flow는 collect할 때마다 새로 생성된다.
- Flow는 액티비티의 생명 주기를 고려하지 않는다(액티비티가 파괴되어도 계속 실행된다).
생명 주기 반영하기
- 생명 주기 메서드 직접 이용하기.
val job: Job? = null overide fun onStart() { super.onStart() job = exampleFlow.collect { // collect data }.launchIn(lifeCycleScope) } overide fun onStop() { super.onStop() job?.cancel() }
- repeatOnLifecycle() 이용하기.
- Suspend Function.
- Coroutine Scope 내부에서 호출할 수 있다.
lifecycleScope.launch { repeatOnLifecycle(Lifecycle.State.STARTED) { exampleViewModel.exampleFlow // collect data } }
- Suspend Function.
- flowWithLifecycle() 이용하기.
- NOT Suspend Function.
- Lifecycle과 연동되는 Flow를 반환한다. 별도의 Coroutine Scope를 통해 구독해야 한다.
lifecycleScope.launch { exampleViewModel.exampleFlow .flowWithLifecycle(lifecycle, Lifecycle.State.STARTED) .collect { // collect data } }
- NOT Suspend Function.