Ответ
onRestoreInstanceState() вызывается после onStart(), если система восстанавливает состояние Activity после его уничтожения (например, при повороте экрана или нехватке памяти). В отличие от onCreate(), он вызывается только при наличии сохранённого состояния (Bundle), переданного в метод.
Пример:
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
val savedText = savedInstanceState.getString("KEY_TEXT")
textView.text = savedText
}
Важно: данные в onRestoreInstanceState те же, что и в onCreate(), но этот метод гарантированно вызывается только при восстановлении, а не при первом создании Activity.
Ответ 18+ 🔞
Э, слушай, история про этот onRestoreInstanceState — это просто ёперный театр какой-то. Ну представь: твоя активити померла, система её прибила, а потом такая: «Ой, сорян, давай обратно соберём». И тут начинается цирк.
Вот смотри. Все знают onCreate(), там в savedInstanceState либо Bundle прилетает, либо null. И ты думаешь: «Ну окей, всё логично». Но нет, блядь, тут есть ещё один заход — этот самый onRestoreInstanceState(). Он вызывается после onStart(), но только в одном-единственном случае: если система реально восстанавливает твоё состояние, а не создаёт активити с нуля. То есть если Bundle не null и всё такое.
Вот пример кода, смотри:
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
val savedText = savedInstanceState.getString("KEY_TEXT")
textView.text = savedText
}
Фишка в чём? Данные в этом Bundle — те же самые, что и в onCreate(). Овердохуища, да? Но разница-то есть, и она хитрая, как жопа. Метод onCreate() вызывается всегда, а onRestoreInstanceState() — только при восстановлении. То есть если ты запускаешь активити впервые — этот метод вообще проигнорируют. А вот если система её убила и потом оживила (например, при повороте экрана или когда память кончилась) — тогда он сработает.
Так зачем он нужен, спросишь? А чтобы код был чище, чувак. В onCreate() ты можешь инициализировать всё с нуля, а восстановление состояния вынести в отдельный метод. Так логика разделяется: создание — отдельно, восстановление — отдельно. Удобно, блядь.
Главное — не забудь вызвать super.onRestoreInstanceState(savedInstanceState), а то будет тебе хиросима и нигерсраки. Система тоже хочет восстановить своё состояние, понимаешь?
Короче, если коротко: onRestoreInstanceState() — это такой страховочный круг, который кидают только когда тонут. А если плывёшь нормально — он просто лежит в шлюпке и не парится.