Как сохранить данные при повороте экрана

«Как сохранить данные при повороте экрана» — вопрос из категории Android компоненты, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для сохранения данных при повороте экрана используйте ViewModel или onSaveInstanceState().

1. ViewModel (рекомендуется для сложных данных):

class MyViewModel : ViewModel() {
    var data: String = ""
}

// В Activity/Fragment
private val viewModel by viewModels<MyViewModel>()
viewModel.data = "Important info" // Сохраняется при повороте

2. onSaveInstanceState() (для простых данных):

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

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val savedData = savedInstanceState?.getString("KEY")
}

Разница:

  • ViewModel сохраняется в памяти (быстрее, но очищается при завершении процесса)
  • Bundle сохраняется системой (медленнее, но переживает завершение процесса)