CoroutineScope를 이용해 코루틴을 사용하지만, 이를 lifecycle에 맞추어 사용할 수 있다. 뷰모델에서 더 편리하게 만들어준 것이 CoroutineScope.
LifeCycleOwner의 lifecycle에 엮여있다 -> lifecycle이 Destroyed되면 Cacel된다.
Dispathers.Main(UI 스레드)에 바인딩 되어있다!!!
LifecycleCoroutineScope를 통해 Lifecycle 상태에 따른 처리도 가능하다.
(ex. LifecycleScope.launchWhenCreated, launchWhenResumed, launchWhenStarted)
Lifecycle에서 repeatOnLifecycle() 이라는 함수가 추가됨.
(lifecycle:lifecycle-runtime-ktx:2.4.0-alpha01 이상 버전부터 사용 가능)
-> 번거롭게 OnStart()/onStop()에서 작성을 하지 않아도 알아서 collect/cancel을 반복 해준다.
CoroutineScope를 상속받고 있으며 뷰모델의 생명주기에 코루틴 작업을 맞춰줄 수 있다.
ViewModel.onCleared()에서 작업중인 coroutine을 취소한다.
사실 따지고 보면 같은 역할을 한다고 할 수 있음! 그러나 LifecycleScope는 라이프 사이클에 의해 Destroy되면 cancel되고, viewModelScope는 onCleared에서 Cancel을 해주는 것!
ref.
https://velog.io/@seokzoo/LifeCycleScope-ViewModelScope의-내부-구조
LifecycleScope로 코루틴 돌리고 안에 Timer를 돌리고 있는데, 이게 자꾸 멈추면 해당 라이프사이클이 destroy 된 경우라고 봐도 무관할까요? 다른 경우의 수가 있을까요.ㅜ