Каждый экран в приложении проходит через несколько этапов: появляется на свет, становится видимым, уходит в тень и, наконец, исчезает. Этот путь называется жизненным циклом, и если вы только начинаете изучать Kotlin в Android Studio, важно сразу понять, как он устроен. Без этого легко столкнуться с неприятностями: набранный текст пропадает при повороте телефона, а музыка продолжает играть после закрытия программы. Сегодняшний урок как раз об этом — простыми словами и с живыми примерами.
Зачем нужны эти состояния
Представьте, что ваше Activity — это человек, который приходит домой. Сначала он открывает дверь (запуск), заходит внутрь (становится видимым), может отвлечься на звонок (свернуть), а потом лечь спать (закрыться). На каждом шаге происходят определённые события, и система сообщает об этом вашему коду. Если знать, в какой момент что происходит, можно сохранить важные данные, остановить тяжёлые операции или, наоборот, запустить анимацию.
Главные методы жизненного цикла
Когда вы создаёте новый экран, Android Studio уже пишет за вас один из таких методов — onCreate. Но их гораздо больше. Вот они по порядку, как в настоящей жизни приложения:
- onCreate — экран только появился на свет. Здесь вы подключаете разметку и настраиваете элементы.
- onStart — экран вот-вот станет видимым для пользователя, но пока ещё не появился.
- onResume — экран полностью готов к взаимодействию. Пользователь его видит и может нажимать кнопки.
- onPause — экран частично скрыт (например, поверх него открылось другое окно). Здесь принято сохранять данные, которые могут измениться.
- onStop — экран полностью скрыт. Приложение может оставаться в памяти, но уже не видно.
- onDestroy — экран уничтожается. Последний шанс убрать за собой всё лишнее.
Пример с сохранением текста при повороте
Самая частая проблема у новичков: набрал текст в поле, повернул телефон — а поле пустое. Всё потому, что при повороте экран проходит через onPause, onStop, onDestroy, а потом создаётся заново. Чтобы текст не терялся, можно сохранить его в специальный Bundle внутри onSaveInstanceState и восстановить в onCreate.
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putString("text", editText.text.toString())
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if (savedInstanceState != null) {
val savedText = savedInstanceState.getString("text")
editText.setText(savedText)
}
}
Теперь поворот экрана больше не страшен — данные вернутся на свои места.
Логируем весь цикл, чтобы увидеть своими глазами
Лучший способ разобраться — добавить во все методы вывод в лог. Тогда в Logcat будет видно, в каком порядке они вызываются. Проделайте это в любом проекте, и картинка сразу станет понятной.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
Log.d("Lifecycle", "onCreate")
// ...
}
// аналогично для onStart, onResume, onPause, onStop, onDestroy
Запустите приложение, покрутите экран, нажмите кнопку «Домой» и снова вернитесь — вы увидите настоящий ритм работы Android.
Главное, что нужно запомнить
- Жизненный цикл — это не страшная теория, а реальная последовательность событий, которую можно наблюдать в логах.
- Метод
onCreateвызывается один раз, аonResumeиonPauseмогут вызываться много раз за жизнь экрана. - Для сохранения данных между поворотами используйте
onSaveInstanceStateили ViewModel (о нём мы говорили в другом занятии). - Всегда думайте о том, что делать в
onPause: здесь лучше остановить музыку или анимацию, чтобы не расходовать батарею зря.
Чему мы научились
Сегодняшняя встреча с Android Studio была посвящена одному из самых важных понятий — жизненному циклу экрана. Вы узнали, через какие стадии проходит Activity, как подписаться на каждое событие и как не потерять данные при повороте устройства. Эти знания сразу пригодятся в любом проекте, будь то простой блокнот или игра. Попробуйте прямо сейчас добавить логирование в своё приложение и посмотрите, как оно живёт — тогда всё станет на свои места.