Разработка
В чем основное различие между viewModelScope и lifecycleScope в Android — вопросы с собеседований
Основное различие между viewModelScope и lifecycleScope заключается в том, к какому жизненному циклу они привязаны.
При работе с корутинами в Android разработчики часто используют два самых распространённых скоупа — viewModelScope и lifecycleScope. Оба они упрощают управление асинхронными задачами и предотвращают утечки памяти, но при этом имеют разные цели и правила работы. Разберёмся, чем они отличаются и в каких ситуациях каждый стоит применять.
Что такое viewModelScope?
viewModelScope — это CoroutineScope, привязанный к жизненному циклу ViewModel. Он автоматически создаётся при инициализации модели представления и живёт до вызова ViewModel.onCleared().
Ключевые особенности viewModelScope
- Живёт столько же, сколько ViewModel.
- Подходит для долгих операций, переживающих повороты экрана.
- Задачи автоматически отменяются, когда ViewModel уничтожается.
Идеален для загрузки данных, обработки бизнес-логики, запросов к базе данных или сети, обновления LiveData или StateFlow.
Когда использовать
Если корутина не должна зависеть от состояния UI-элементов и должна пережить изменение конфигурации — используйте viewModelScope.
Что такое lifecycleScope?
lifecycleScope — это CoroutineScope, привязанный к жизненному циклу Activity или Fragment.
Он автоматически отменяет корутины при соответствующих событиях жизненного цикла (например, onDestroy()).
Ключевые особенности lifecycleScope
- Живёт столько же, сколько Activity или Fragment.
- Привязан к UI-компоненту.
- Не переживает поворот экрана (активность пересоздаётся — задачи отменяются).
Идеален для анимаций, взаимодействия с UI, коротких задач, связанных с экраном, наблюдения за потоками данных внутри repeatOnLifecycle.
Когда использовать
Если операция связана с UI и должна быть отменена при уничтожении экрана — используйте lifecycleScope.
Главное различие
Основное различие между viewModelScope и lifecycleScope заключается в том, к какому жизненному циклу они привязаны:
| Свойство | viewModelScope | lifecycleScope |
|---|---|---|
| Привязан к | ViewModel | Activity или Fragment |
| Переживает поворот экрана | Да | Нет |
| Подходящие задачи | Бизнес-логика, запросы, долгие операции | UI-логика, анимации, локальные действия |
| Автоматическое завершение | При onCleared() | При onDestroy() |
| Риск утечек памяти | Практически отсутствует | Нужно быть осторожным с ссылками на UI |
Пример использования viewModelScope
class MainViewModel : ViewModel() {
private val _state = MutableLiveData<String>()
val state: LiveData<String> = _state
fun loadData() {
viewModelScope.launch {
val data = repository.getData()
_state.value = data
}
}
}
Здесь корутина будет работать даже при изменении конфигурации — ViewModel сохраняется.
Пример использования lifecycleScope
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
lifecycleScope.launch {
delay(2000)
Toast.makeText(this@MainActivity, "Hello!", Toast.LENGTH_SHORT).show()
}
}
}
Если пользователь уйдет с экрана, корутина будет отменена, и Toast не покажется.
Итог
Оба скоупа — важные инструменты для грамотной работы с корутинами, но их нужно использовать осознанно:
viewModelScope— для логики, не зависящей от UI и переживающей повороты экрана.lifecycleScope— для задач, тесно связанных с жизненным циклом экрана.
Используя их правильно, можно сделать приложения устойчивыми, управляемыми и безопасными с точки зрения памяти.
Дополнительно
- Другие вопросы с собеседований
-
Аналитика магазинов3 недели назад
Мобильный рынок Ближнего Востока: исследование Bidease и Sensor Tower выявляет драйверы роста
-
Новости4 недели назад
Видео и подкасты о мобильной разработке 2025.46
-
Видео и подкасты для разработчиков3 недели назад
Разбор кода: iOS-приложение для управления личными финансами на Swift. Часть 1
-
Новости3 недели назад
Видео и подкасты о мобильной разработке 2025.47

