Что такое ViewModelScope?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
ViewModelScope — основа управления асинхронными операциями в MVVM
Что это такое
ViewModelScope — это корутин-скоп, автоматически привязанный к жизненному циклу ViewModel. Это компонент из lifecycle-viewmodel-ktx библиотеки, который позволяет безопасно запускать корутины без утечек памяти.
class UserViewModel : ViewModel() {
fun loadUser() {
viewModelScope.launch {
val user = repository.getUser()
_userState.value = user
}
}
}
Жизненный цикл
Ключевое преимущество: корутины автоматически отменяются когда ViewModel удаляется из памяти. Это предотвращает:
- Утечки памяти: нет необходимости вручную отменять корутины
- Крахи приложения: обновление UI на удалённом объекте
- Неконтролируемые фоновые задачи: всё завершается вместе с ViewModel
Почему это лучше, чем GlobalScope
GlobalScope.launch существует всё время жизни приложения и не отменяется автоматически. Это приводит к утечкам памяти и непредсказуемому поведению. ViewModelScope привязан к ViewModel, поэтому:
- Корутина отменяется вместе сViewModel
- Нет утечек памяти
- Безопасная работа с UI
Структурированная конкурентность
ViewModelScope реализует structured concurrency — все корутины в скопе имеют общего родителя (ViewModel). Это означает:
- Отмена родителя отменяет всех детей
- Исключение в дочерней корутине может распространиться на родителя
- Всегда контролируемое состояние
Примеры использования
class ProductViewModel : ViewModel() {
private val _products = MutableStateFlow<List<Product>>(emptyList())
val products = _products.asStateFlow()
init {
// Загрузка при создании ViewModel
viewModelScope.launch {
_products.value = repository.fetchProducts()
}
}
fun refreshProducts() {
viewModelScope.launch {
try {
_products.value = repository.fetchProducts()
} catch (e: Exception) {
// Обработка ошибки
}
}
}
}
Альтернативы
- lifecycleScope — для Fragment/Activity, привязан к жизненному циклу UI
- coroutineScope — для функций, требует явной отмены
- supervisorScope — позволяет дочерним корутинам падать независимо
Выводы
ViewModelScope — это стандартный, безопасный и правильный способ запускать асинхронные операции в Android. Его использование гарантирует отсутствие утечек памяти и правильное управление жизненным циклом корутин. Это базовый инструмент современной Android разработки, часть рекомендаций от Google.