Coroutine 사용방법
- Dispatcher(=작업 종류) 결정
- ispatcher로 CoroutineScope 생성
- 3. CoroutineScope의 launch/async에 실행할 코드 블록을 넘김
CoroutineScope
- 코루틴의 실행 범위, 코루틴 블록을 제어할 수 있는 단위
- GlobalScope
- CoroutineScope의 한 종류. 최초 접근시 만들어짐.
- 앱이 동작하는 동안 별도의 생명 주기를 관리하지 않고 사용할 수 있음.
- 이는 안드로이드 앱이 처음 시작부터 종료 할때까지 하나의 CoroutineContext 안에서 동작하도록 할 수 있음.
- 다만, Job을 컨트롤하기에 접합하지 않음에 주의 해야함
- Lifecycle-Aware Coroutine Scopes:
- Android Lifecycle용(KTX 종속)
- ViewModelScope
- androidx.lifecycle ViewModelKt .class public val ViewModel.viewModelScope: CoroutineScope CoroutineScope tied to this ViewModel. This scope will be canceled when ViewModel will be cleared, i.e ViewModel.onCleared is called This scope is bound to Dispatchers.Main.immediate
- ViewModelScope는 앱의 각 ViewModel을 대상으로 정의됩니다. 이 범위에서 시작된 모든 코루틴은 ViewModel이 삭제되면 자동으로 취소됩니다. 코루틴은 ViewModel이 활성 상태인 경우에만 실행해야 할 작업이 있을 때 유용합니다. 예를 들어 레이아웃의 일부 데이터를 계산한다면 작업의 범위를 ViewModel로 지정하여 ViewModel을 삭제하면 리소스를 소모하지 않도록 작업이 자동으로 취소됩니다.
- LifecycleScope
- LifecycleScope는 각 Lifecycle 객체에서 정의됩니다. 이 범위에서 시작된 코루틴은 Lifecycle이 끝날 때 취소됩니다. lifecycle.coroutineScope 또는 lifecycleOwner.lifecycleScope 속성을 통해 Lifecycle의 CoroutineScope에 액세스할 수 있습니다.
- ViewModelScope
- Android Lifecycle용(KTX 종속)
Reference
thdev.tech/kotlin/2019/04/05/Init-Coroutines/
developer.android.com/topic/libraries/architecture/coroutines#lifecyclescope
'Dev > Kotlin' 카테고리의 다른 글
[Kotlin] Built-in Delegates (0) | 2020.11.19 |
---|---|
[Android/Kotlin] Coroutine - suspend가 redundant? (0) | 2020.11.05 |
[Kotlin 기초] Boolean Array 일괄 초기화 방법 (0) | 2020.10.26 |
[Kotlin] 증감 연산 함수 (0) | 2020.09.22 |
[Kotlin] @JvmField, @JvmStatic (0) | 2020.08.20 |