Sobes.tech
Back to questions
Junior — Middle
72

Чем отличаются GlobalScope, MainScope и создание собственного Scope в Kotlin Coroutines?

Companies where asked
ЯндексЯндекс

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 зависит от того, как вы хотите управлять временем жизни корутин и их отменой.