Назад к вопросам
Middle
120
questionbank
Что такое CoroutineScope в Kotlin и как он используется в разработке под Android?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
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:
// ViewModel.kt
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.launch
class MyViewModel : ViewModel() {
fun performAsyncTask() {
viewModelScope.launch {
// Асинхронная задача
}
}
override fun onCleared() {
super.onCleared()
// viewModelScope автоматически отменяется здесь
}
}
Пример использования LifecycleScope:
// MyActivity.kt
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.lifecycle.lifecycleScope
import kotlinx.coroutines.launch
class MyActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_my)
lifecycleScope.launch {
// Корутина будет запущена и отменена вместе с Activity
}
}
}
Таблица сравнения скоупов:
| Scope | Жизненный цикл | Рекомендуется для | Примечание |
|---|---|---|---|
| GlobalScope | Приложение | - | Не рекомендуется, утечки памяти |
| ViewModelScope | ViewModel.onCleared() | ViewModel | Автоматически отменяется |
| LifecycleScope | Activity/Fragment onDestory() | Activity/Fragment | Привязан к жизненному циклу |
| Custom Scope | Определяется пользователем | - | Гибкость |