---
title: Жизненный цикл компонентов
seo:
  title: Жизненный цикл компонентов — Kotlin Developer
  description: Тема «Жизненный цикл компонентов» для собеседования Kotlin Developer. Опишите жизненный цикл (ЖЦ) активити и фрагмента. В чем их отличие? Что инициализируется раньше? Можно ли заставить сервис работать постоянно?
---

[Все темы Kotlin Developer](/kotlin-developer)

## <strong>Опишите жизненный цикл (ЖЦ) активити и фрагмента. В чем их отличие? Что инициализируется раньше?</strong> [#q-14bee738d69b81208743c8f732daa7ff]

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

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

1. [Жизненный цикл приложения на Android](https://developer.alexanderklimov.ru/android/theory/lifecycle.php)

---

## <strong>Можно ли заставить сервис работать постоянно?</strong> [#q-14bee738d69b81ad91dec30031a6ffd8]

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

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

1. [Жизненный цикл приложения на Android](https://developer.alexanderklimov.ru/android/theory/lifecycle.php)

---

## <strong>Объясните жизненный цикл</strong> <code>Activity</code> <strong>в Android.</strong> [#q-14bee738d69b81adbf21c8b0e2b2483c]

Жизненный цикл <code>Activity</code> включает следующие основные методы&#58;

- <code>onCreate&#40;&#41;</code>&#58; Вызывается при создании Activity. Здесь
  происходит начальная настройка, такая как создание интерфейса.

- <code>onStart&#40;&#41;</code>&#58; Вызывается, когда Activity становится
  видимой для пользователя.

- <code>onResume&#40;&#41;</code>&#58; Вызывается, когда Activity начинает
  взаимодействовать с пользователем.

- <code>onPause&#40;&#41;</code>&#58; Вызывается, когда приложение теряет фокус,
  но еще видно.

- <code>onStop&#40;&#41;</code>&#58; Вызывается, когда Activity больше не видно
  пользователю.

- <code>onDestroy&#40;&#41;</code>&#58; Вызывается перед уничтожением Activity.

- <code>onRestart&#40;&#41;</code>&#58; Вызывается перед повторным запуском
  Activity из состояния остановки.

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

1. [Жизненный цикл приложения на Android](https://developer.alexanderklimov.ru/android/theory/lifecycle.php)

---

## <strong>Какой метод вызывается при повороте экрана и как с этим справляться?</strong> [#q-14bee738d69b814992c1ef3160280278]

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

Чтобы сохранить данные при повороте экрана&#58;

1. <strong>Сохранение состояния в</strong> <code>Bundle</code>&#58;

   ```kotlin
   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")
       }
   }
   ```

1. <strong>Использование</strong> <code>ViewModel</code>&#58;
   <code>ViewModel</code> сохраняет данные при изменении конфигурации.

   ```kotlin
   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](https://developer.alexanderklimov.ru/android/theory/lifecycle.php)

---

## <strong>Как работать с жизненным циклом</strong> <code>Fragment</code> <strong>в Android?</strong> [#q-14bee738d69b811c8f9ddba911ece056]

Фрагменты имеют собственный жизненный цикл, синхронизированный с жизненным циклом <code>Activity</code>&#58;

- <code>onAttach&#40;&#41;</code>&#58; Фрагмент присоединен к Activity.

- <code>onCreate&#40;&#41;</code>&#58; Создание фрагмента.

- <code>onCreateView&#40;&#41;</code>&#58; Создание представления фрагмента.

- <code>onActivityCreated&#40;&#41;</code>&#58; Метод вызывается, когда Activity
  и фрагмент созданы.

- <code>onStart&#40;&#41;</code>&#58; Фрагмент становится видимым.

- <code>onResume&#40;&#41;</code>&#58; Фрагмент начинает взаимодействовать с
  пользователем.

- <code>onPause&#40;&#41;</code>&#58; Фрагмент теряет фокус, но еще виден.

- <code>onStop&#40;&#41;</code>&#58; Фрагмент больше не виден.

- <code>onDestroyView&#40;&#41;</code>&#58; Удаление представления фрагмента.

- <code>onDestroy&#40;&#41;</code>&#58; Удаление фрагмента.

- <code>onDetach&#40;&#41;</code>&#58; Фрагмент отсоединен от Activity.

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

1. [Жизненный цикл приложения на Android](https://developer.alexanderklimov.ru/android/theory/lifecycle.php)

---

## <strong>Как управлять состоянием компонентов при изменении конфигурации устройства?</strong> [#q-14bee738d69b8145a0f4e27b8b7dbb3e]

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

1. <code>ViewModel</code>&#58; <code>ViewModel</code> сохраняет состояние данных
   при изменении конфигурации.

   ```kotlin
   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. <code>onSaveInstanceState&#40;&#41;</code> и
   <code>onRestoreInstanceState&#40;&#41;</code>&#58; Сохранение и
   восстановление состояния через Bundle.

   ```kotlin
   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")
   }
   ```

1. Устаревший способ&#58; retainInstance у Fragment. Для сохранения данных используйте ViewModel, а для восстановления после завершения процесса также SavedStateHandle или сохранённое состояние. Пример ниже приведён только для понимания старого кода.

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

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

1. [Жизненный цикл приложения на Android](https://developer.alexanderklimov.ru/android/theory/lifecycle.php)
