Перейти к содержимому
На этой странице

Жизненный цикл компонентов

Все темы Kotlin Developer

Опишите жизненный цикл (ЖЦ) активити и фрагмента. В чем их отличие? Что инициализируется раньше?

Activity и Fragment имеют этапы создания, запуска, возобновления, остановки и уничтожения. Состояние Fragment ограничено состоянием хоста и FragmentManager. У представления Fragment отдельный жизненный цикл: View может быть уничтожена раньше самого Fragment. При обычном создании Activity начинает инициализацию хоста, затем создаются и подключаются фрагменты; точный порядок зависит от восстановления состояния и способа добавления.

🔗 Ссылки для скачивания

  1. Жизненный цикл приложения на Android

Можно ли заставить сервис работать постоянно?

Гарантировать непрерывную работу сервиса нельзя. Foreground service выполняет заметную пользователю работу с уведомлением, но система или пользователь могут его остановить. Действуют ограничения запуска и времени работы для отдельных типов сервисов. Для отложенных устойчивых задач применяют подходящий механизм планирования, например WorkManager.

🔗 Ссылки для скачивания

  1. Жизненный цикл приложения на Android

Объясните жизненный цикл Activity в Android.

Жизненный цикл Activity включает следующие основные методы:

  • onCreate(): Вызывается при создании Activity. Здесь происходит начальная настройка, такая как создание интерфейса.

  • onStart(): Вызывается, когда Activity становится видимой для пользователя.

  • onResume(): Вызывается, когда Activity начинает взаимодействовать с пользователем.

  • onPause(): Вызывается, когда приложение теряет фокус, но еще видно.

  • onStop(): Вызывается, когда Activity больше не видно пользователю.

  • onDestroy(): Вызывается перед уничтожением Activity.

  • onRestart(): Вызывается перед повторным запуском Activity из состояния остановки.

🔗 Ссылки для скачивания

  1. Жизненный цикл приложения на Android

Какой метод вызывается при повороте экрана и как с этим справляться?

По умолчанию изменение конфигурации, например поворот экрана, пересоздаёт Activity. Если соответствующие изменения объявлены в android:configChanges, система вызывает onConfigurationChanged() вместо пересоздания. Одного переопределения метода недостаточно.

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

  1. Сохранение состояния в Bundle:

    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        outState.putString("key", "value")
    }
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        if (savedInstanceState != null) {
            val value = savedInstanceState.getString("key")
        }
    }
  2. Использование ViewModel: ViewModel сохраняет данные при изменении конфигурации.

    class MyViewModel : ViewModel() {
        val data: MutableLiveData<String> = MutableLiveData()
    }
    
    class MainActivity : AppCompatActivity() {
        private val viewModel: MyViewModel by viewModels()
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            viewModel.data.observe(this, Observer {
                // Обновление UI
            })
        }
    }

🔗 Ссылки для скачивания

  1. Жизненный цикл приложения на Android

Как работать с жизненным циклом Fragment в Android?

Фрагменты имеют собственный жизненный цикл, синхронизированный с жизненным циклом Activity:

  • onAttach(): Фрагмент присоединен к Activity.

  • onCreate(): Создание фрагмента.

  • onCreateView(): Создание представления фрагмента.

  • onActivityCreated(): Метод вызывается, когда Activity и фрагмент созданы.

  • onStart(): Фрагмент становится видимым.

  • onResume(): Фрагмент начинает взаимодействовать с пользователем.

  • onPause(): Фрагмент теряет фокус, но еще виден.

  • onStop(): Фрагмент больше не виден.

  • onDestroyView(): Удаление представления фрагмента.

  • onDestroy(): Удаление фрагмента.

  • onDetach(): Фрагмент отсоединен от Activity.

🔗 Ссылки для скачивания

  1. Жизненный цикл приложения на Android

Как управлять состоянием компонентов при изменении конфигурации устройства?

Для управления состоянием компонентов при изменении конфигурации устройства можно использовать:

  1. ViewModel: ViewModel сохраняет состояние данных при изменении конфигурации.

    class MyViewModel : ViewModel() {
        val data: MutableLiveData<String> = MutableLiveData()
    }
    
    class MainActivity : AppCompatActivity() {
        private val viewModel: MyViewModel by viewModels()
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            viewModel.data.observe(this, Observer {
                // Обновление UI
            })
        }
    }
  2. onSaveInstanceState() и onRestoreInstanceState(): Сохранение и восстановление состояния через Bundle.

    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        outState.putString("key", "value")
    }
    
    override fun onRestoreInstanceState(savedInstanceState: Bundle) {
        super.onRestoreInstanceState(savedInstanceState)
        val value = savedInstanceState.getString("key")
    }
  3. Устаревший способ: retainInstance у Fragment. Для сохранения данных используйте ViewModel, а для восстановления после завершения процесса также SavedStateHandle или сохранённое состояние. Пример ниже приведён только для понимания старого кода.

    class MyFragment : Fragment() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            retainInstance = true
        }
    }

🔗 Ссылки для скачивания

  1. Жизненный цикл приложения на Android

Собеседования: Kotlin

Смотри записи интервью, узнай, какие вопросы задают и как отвечают кандидаты.

Вопросы и ответы

Не нашли ответ? Напишите мне в чат. Я делаю Шпаргалку и сам отвечаю на сообщения. Расскажите, что не работает или чего вам не хватает. Может, смогу сразу взять это в работу.

Откуда взяты вопросы?

Из реальных собеседований. Основой подборки стал опыт Вадима Новосёлова: он проходил интервью и записывал вопросы. Подробнее о материалах.

Насколько эти вопросы актуальны?

Эти вопросы встречались нам на реальных собеседованиях в 2025 году. Мы регулярно проходим собеседования и пополняем подборку новыми вопросами. Основы профессии и ключевые технологии остаются востребованными годами, а детали конкретных инструментов и версий стоит сверять с текущей документацией.

На какой уровень рассчитана подборка?

Мы проходили собеседования на вакансии уровня Middle+, а иногда и на Senior-позиции. Вопросы из этих интервью вошли в подборку. Направления работы: Kotlin-разработчик, Android-разработчик, Backend-разработчик на Kotlin. Глубина обсуждения зависит от вакансии: будь готов объяснить основную идею, привести практический пример и разобрать ограничения и альтернативы решения.

Этот вопрос точно будет на моём собеседовании?

Гарантии нет: набор вопросов зависит от компании, задач команды, уровня вакансии и самого интервьюера. Эти вопросы уже встречались на реальных собеседованиях, но на твоём интервью ту же тему могут проверить другой формулировкой, практической задачей или обсуждением твоего опыта. Используй подборку, чтобы разобраться в теме: объясняй идею своими словами, приводи примеры и готовься обсудить ограничения и альтернативы решения. Так будет проще ответить и на знакомый вопрос, и на неожиданные уточнения.