Ответ
При повороте экрана, изменении языка, конфигурации системы или принудительном завершении системой (из-за нехватки памяти). В этих случаях система вызывает onDestroy(), затем создает новый экземпляр и вызывает onCreate().
Пример сохранения состояния:
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putString("KEY", "value")
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val restoredValue = savedInstanceState?.getString("KEY")
}
Для обработки изменений конфигурации можно использовать android:configChanges в манифесте, но это не рекомендуется для большинства сценариев.
Ответ 18+ 🔞
Э, слушай, вот тебе жизненная ситуация из мира андроида. Представь: ты наконец-то выставил на экране нужный текст, выбрал опцию... И тут — бац! — телефон повернули, язык сменили или система, сука, из-за нехватки памяти твое приложение прибила. Ёпта, волнение ебать!
Что происходит? Всё, твой активити накрылся медным тазом. Система вызывает onDestroy(), а потом, как ни в чём не бывало, создаёт новый экземпляр и запускает onCreate() заново. И всё твое состояние, над которым ты так парился, — на хуй улетело. Сам от себя охуеешь.
Но не всё так плохо, есть же способ сохранить хоть что-то! Перед тем как всё похерить, система даёт тебе последний шанс — метод onSaveInstanceState(). Туда ты можешь запихнуть в Bundle всё, что дорого сердцу.
Вот смотри, как это выглядит в коде:
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putString("KEY", "value") // Кладём свою ценную строку, например
}
Потом, когда система откроет новый экземпляр и вызовет onCreate(), она протянет тебе тот же самый Bundle (если он есть). Ты его раскрываешь и забираешь своё добро обратно.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val restoredValue = savedInstanceState?.getString("KEY") // Ага, вот и наша строка!
}
Вот так, бля, и живём. Восстанавливаем то, что успели спасти.
А ещё есть, конечно, хитрая жопа — атрибут android:configChanges в манифесте. Мол, "система, не трогай ничего, я сам всё обработаю". Но это, чувак, тот самый хуй в пальто. Для 99% случаев так делать не рекомендуется, потому что возьмёшь на себя овердохуища ручной работы, а справишься хуёво. Лучше доверься нормальному механизму сохранения состояния.