> Как управлять жизненным циклом корутины в Kotlin (Kotlin, Android)

Уровень: senior · Роль: mobile · Категория: Технические вопросы

Компании: IBS

Стек: Kotlin, Android

> Пример ответа

Управление жизненным циклом корутины в Kotlin/Android строится на привязке области выполнения к компонентам UI (Activity, Fragment, ViewModel) с помощью CoroutineScope. Основные подходы:

  1. Использование viewModelScope (в ViewModel) - корутины автоматически отменяются при уничтожении ViewModel. Пример:

    class MyViewModel : ViewModel() {
        fun loadData() {
            viewModelScope.launch {
                // запрос, который отменится при очистке ViewModel
            }
        }
    }
  2. Использование lifecycleScope (в Activity/Fragment) - корутины привязаны к жизненному циклу компонента. Для отмены при паузе используйте Lifecycle.State.STARTED:

    lifecycleScope.launchWhenStarted {
        // выполняется, пока компонент в состоянии STARTED или RESUMED
    }
  3. Создание собственного CoroutineScope с привязкой к жизненному циклу через onDestroy:

    class MyActivity : AppCompatActivity() {
        private val scope = CoroutineScope(Dispatchers.Main + SupervisorJob())
        
        override fun onDestroy() {
            super.onDestroy()
            scope.cancel() // отмена всех корутин
        }
    }
  4. Использование withContext и async/await для управления порядком выполнения и отменой вложенных корутин.

Ключевой принцип: всегда отменяйте корутины, когда компонент больше не нужен, чтобы избежать утечек памяти и выполнения фоновых задач после уничтожения UI.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью