viewModelScope vs LifecycleScope vs CoroutineScope 차이

상상코딩·2022년 1월 4일
0

안드로이드

목록 보기
6/21
post-custom-banner

CoroutineScope를 이용해 코루틴을 사용하지만, 이를 lifecycle에 맞추어 사용할 수 있다. 뷰모델에서 더 편리하게 만들어준 것이 CoroutineScope.

LifecycleScope

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을 반복 해준다.

ViewModelScope

CoroutineScope를 상속받고 있으며 뷰모델의 생명주기에 코루틴 작업을 맞춰줄 수 있다.
ViewModel.onCleared()에서 작업중인 coroutine을 취소한다.

정리

사실 따지고 보면 같은 역할을 한다고 할 수 있음! 그러나 LifecycleScope는 라이프 사이클에 의해 Destroy되면 cancel되고, viewModelScope는 onCleared에서 Cancel을 해주는 것!

ref.
https://velog.io/@seokzoo/LifeCycleScope-ViewModelScope의-내부-구조

profile
히히낙낙
post-custom-banner

1개의 댓글

comment-user-thumbnail
2023년 12월 18일

LifecycleScope로 코루틴 돌리고 안에 Timer를 돌리고 있는데, 이게 자꾸 멈추면 해당 라이프사이클이 destroy 된 경우라고 봐도 무관할까요? 다른 경우의 수가 있을까요.ㅜ

답글 달기