Можно ли ViewModel заменить onSaveInstanceState()?
Не совсем. Вернее не всегда вьюмоделью можно заменить onSaveInstanceState().
Рассмотри такой случай, когда в нашей активити есть ViewModel, которая сохраняет наши данные. Так же эти же данные сохраняются в onSaveInstanceState(). Всего есть три варианта как будет создаваться активити:
- Активити запускается в первый раз. В таком случае никаких данный ни во ViewModel, ни в bundle savedInstanceState не будет.
- Активити запускается после того как ее остановила система (чтобы освободить память например). В таком случае данные будут в savedInstanceState, но их не будет во ViewModel
- Активити запускается после изменения конфигурации (например поворот экрана). В таком случае наши данные будут и в savedInstanceState и во ViewModel.
Как мы видим, ViewModel не позволяет сохранить данные когда активити была остановлена системой, но при этом ViewModel предоставляет удобный API, чтобы сохранять большое количество данных во время configuration changes. Стоит рассматривать ViewModel только как средство сохранять данные при изменениях конфигурации, а чтобы сохранять данные при уничтожении активити системой стоит использовать onSaveInstanceState(), но не забывайте что хранить большое количество данных с помощью onSaveInstanceState() нежелательно.
Бесплатные Telegram-боты для обучения
Практика с проверкой кода и помощью ИИ-ментора
AndroidSprint AI Mentor
Проверяет Pull Request'ы в GitHub, проводит тестовые собеседования с голосом и таймером, помогает разбираться с кодом 24/7
Попробовать ИИ-ментора →KotlinSprint Bot
22 урока Kotlin, 220 тестов, 120 практических задач с код-ревью
Начать обучение Kotlin →