Ответ
CoroutineScope определяет контекст выполнения корутин (Job, Dispatcher). Он управляет жизненным циклом корутин, позволяя их отменять и контролировать утечки памяти.
Пример:
class MyViewModel : ViewModel() {
private val scope = viewModelScope // встроенный scope в ViewModel
fun fetchData() {
scope.launch {
val data = repository.loadData() // suspend-функция
updateUi(data)
}
}
}
Ключевые моменты:
- Scope автоматически отменяет все дочерние корутины при завершении (например, при очистке ViewModel)
- Позволяет задавать Dispatcher по умолчанию (Main/IO/Default)
- Предотвращает утечки через structured concurrency (дочерние корутины наследуют контекст)