Чем отличаются GlobalScope, MainScope и создание собственного Scope в Kotlin Coroutines?
Answer from AI
sobes.tech AI
В Kotlin Coroutines CoroutineScope определяет область видимости корутин и их жизненный цикл.
-
GlobalScope — глобальная область, корутины в ней живут до завершения приложения. Использовать её стоит с осторожностью, так как корутины не отменяются автоматически и могут привести к утечкам.
-
MainScope — область, предназначенная для UI-потока (например, в Android). Она создаёт корутины, которые запускаются в главном потоке и обычно отменяются вместе с жизненным циклом компонента (например, Activity). Часто используется с вызовом
cancel()вonDestroy(). -
Создание собственного Scope — позволяет контролировать жизненный цикл корутин, связывая их с конкретным объектом или компонентом. Например, можно создать
CoroutineScopeс определённымJobиDispatcher, чтобы отменять все корутины при уничтожении объекта.
Пример создания собственного Scope:
class MyViewModel : ViewModel() {
private val viewModelJob = Job()
private val scope = CoroutineScope(Dispatchers.Main + viewModelJob)
fun loadData() {
scope.launch {
// корутина
}
}
override fun onCleared() {
super.onCleared()
viewModelJob.cancel() // отменяем все корутины
}
}
Таким образом, выбор Scope зависит от того, как вы хотите управлять временем жизни корутин и их отменой.