CoroutinesScope определяет контекст и жизненный цикл корутины. Он управляет группой дочерних корутин и отменяет их при отмене самого скоупа.
В Android CoroutineScope используется для привязки жизненного цикла корутин к жизненному циклу компонента (Activity, Fragment, ViewModel).
Существует несколько типов скоупов:
GlobalScope: Живет на протяжении всего приложения. Его использование не рекомендуется из-за сложности отмены и потенциальных утечек памяти.ViewModelScope: Предоставляется KTX библиотекой для ViewModel. Отменяется автоматически, когда ViewModel очищается (onCleared()).LifecycleScope: Предоставляется KTX библиотекой для Activity/Fragment. Привязан к жизненному циклу компонента и отменяется при его уничтожении. Можно запускать корутины в разных состояниях жизненного цикла (lifecycle.coroutineScope.launchWhenCreated, lifecycle.coroutineScope.launchWhenStarted, lifecycle.coroutineScope.launchWhenResumed).CoroutineScope при необходимости.Пример использования ViewModelScope:
kotlin
Пример использования LifecycleScope:
kotlin
Таблица сравнения скоупов:
| Scope | Жизненный цикл | Рекомендуется для | Примечание |
|---|---|---|---|
| GlobalScope | Приложение | - | Не рекомендуется, утечки памяти |
| ViewModelScope | ViewModel.onCleared() | ViewModel | Автоматически отменяется |
| LifecycleScope | Activity/Fragment onDestory() | Activity/Fragment | Привязан к жизненному циклу |
| Custom Scope | Определяется пользователем | - | Гибкость |