Coroutine Scope
코루틴의 동작하는 범위를 규정. 스코프 내에서 실행되는 코루틴의 실행을 감시하거나 취소할 수 있다.
GlobalScope
메인 스레드가 실행 중인 동안만 코루틴의 동작을 보장
- 앱의 생명주기와 함께 동작한다.
- 실행중에 별도의 생명주기 관리가 필요 없다.
- 예제
fun now() = ZonedDateTime.now().toLocalTime().truncatedTo(ChronoUnit.MILLIS)
fun log(msg: String) = println("${now()} : ${Thread.currentThread()} : $msg")
fun launchInGlobalScope() {
GlobalScope.launch {
log("coroutine started")
}
}
-
- Thread 일시 정지
fun main() {
log("main() started")
launchInGlobalScope()
log("launchInGlobalScope() executed")
Thread.sleep(500L)
log("main() terminated")
}
22:06:53.755 : Thread[main,5,main] : main() started
22:06:**53.828** : Thread[main,5,main] : launchInGlobalScope() executed
22:06:53.831 : Thread[**DefaultDispatcher-worker-1**,5,main] : coroutine started
22:06:**54.333** : Thread[main,5,main] : main() terminated #일시정지한만큼 쉬고 실행
-
- Thread 일시 정지 X
fun main() {
log("main() started")
launchInGlobalScope()
log("launchInGlobalScope() executed")
//Thread.sleep(500L)
log("main() terminated")
}
22:11:55.391 : Thread[main,5,main] : main() started
22:11:55.455 : Thread[main,5,main] : launchInGlobalScope() executed
22:11:55.455 : Thread[main,5,main] : main() terminated
CoroutineScope
- 특정한 dispatcher 를 지정하여 동작이 실행될 스코프를 제한할 수 있다.
- 필요할 때 열고 닫을 수 있다.
ViewModelScope
JetPack 아키텍쳐의 뷰모델 컴포넌트 사용시 뷰모델 인스턴스에서 사용하기 위해 제공되는 스코프
뷰모델 인스턴스가 소멸될 때 자동으로 취소된다.
반응형
'Language > Kotlin' 카테고리의 다른 글
[Coroutine] Coroutine builder: 코루틴 시작 (0) | 2022.02.07 |
---|---|
[Coroutine] Coroutine Context: 코루틴이 실행되는 곳 (0) | 2022.02.06 |
[Coroutine] 코루틴 사용하기 (0) | 2022.02.05 |
[Coroutine] 코루틴이란? (0) | 2022.02.03 |
[KotlinInAction] 5장-람다로 프로그래밍(5) 수신 객체 지정 람다: with 와 apply (0) | 2021.12.08 |