В чем разница между сохранением состояния в ViewModel и в onSaveInstanceState

«В чем разница между сохранением состояния в ViewModel и в onSaveInstanceState» — вопрос из категории Архитектура, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

ViewModel сохраняет данные в памяти во время изменения конфигурации (например, поворот экрана) и живет, пока связанный с ним Activity/Fragment не будет уничтожен полностью. Подходит для больших или сложных данных (например, списки из сети).

onSaveInstanceState сохраняет данные в Bundle при временном уничтожении процесса (например, при нехватке памяти). Подходит для небольших простых данных (например, ID элемента), так как Bundle имеет ограниченный размер.

Пример:

// ViewModel
class MyViewModel : ViewModel() {
    val data = MutableLiveData<String>()
}

// onSaveInstanceState
override fun onSaveInstanceState(outState: Bundle) {
    outState.putString("KEY", "value")
    super.onSaveInstanceState(outState)
}

Используй ViewModel для временных данных в рамках жизни экрана, а onSaveInstanceState — для критичных данных, которые должны пережить убийство процесса.