Життєвий цикл у мобільній розробці: що це, які етапи та як працює

Автор: IT Sectr Опубліковано: 2026-03-02 Час читання: 9 хв

Життєвий цикл мобільного застосунку визначає, як він поводиться при запуску, згортанні, поверненні з фону та закритті. У цій статті розберемо App Lifecycle (iOS), Activity Lifecycle (Android), Fragment Lifecycle, ViewController Lifecycle та LifecycleOwner. Розуміння цих процесів критично важливе для запобігання витокам пам'яті, втраті даних та некоректній роботі застосунку. Докладніше — в офіційній документації Android Activity Lifecycle.

Головне

  • Activity Lifecycle (Android) включає 7 методів: onCreate → onStart → onResume → onPause → onStop → onDestroy + onRestart
  • ViewController Lifecycle (iOS) викликається в порядку: viewDidLoad → viewWillAppear → viewDidAppear → viewWillDisappear → viewDidDisappear
  • iOS App Lifecycle має 5 станів: Not Running, Inactive, Active, Background, Suspended
  • Fragment Lifecycle прив'язаний до Activity, але має власні методи: onAttach, onCreateView, onViewCreated
  • LifecycleOwner (Android) дозволяє підписуватися на події життєвого циклу через LifecycleObserver

Життєвий цикл застосунку (App Lifecycle)

Перш ніж розбирати життєвий цикл окремих екранів, важливо зрозуміти життєвий цикл всього застосунку в цілому. В iOS застосунок проходить через п'ять станів: Not Running (не запущено), Inactive (у фоні, не приймає події), Active (активно), Background (у фоні, код виконується) та Suspended (у фоні, код призупинено). Керування цими станами відбувається в AppDelegate через методи applicationDidFinishLaunching, applicationDidBecomeActive, applicationWillResignActive, applicationDidEnterBackground та applicationWillTerminate.

В Android аналогом є Application Lifecycle, який відстежується через інтерфейс Application.ActivityLifecycleCallbacks. Однак в Android більше уваги приділяється життєвому циклу Activity — окремого екрану застосунку. Це пов'язано з тим, що Android-застосунок може складатися з багатьох Activity, кожна зі своїм циклом.

Сучасний підхід в Android — використання ProcessLifecycleOwner з бібліотеки lifecycle-process. Він дозволяє відстежувати стан всього процесу без прив'язки до конкретної Activity. В iOS для відстеження стану застосунку використовується UISceneDelegate (починаючи з iOS 13) або AppDelegate. SceneDelegate обробляє кілька вікон (multiwindow) на iPad. Розуміння App Lifecycle особливо важливе для IT Sectr при розробці застосунків з фоновою синхронізацією, стрімінгом та VoIP-дзвінками.

Activity Lifecycle в Android

Activity — базовий компонент Android-застосунку, що представляє один екран. Activity має чітко визначений життєвий цикл, який керується операційною системою у відповідь на дії користувача та системні події (поворот екрану, вхідний дзвінок, нестача пам'яті).

Метод Опис Що робити
onCreateВикликається один раз при створенні ActivityІніціалізація UI, findViewById, налаштування ViewModel
onStartActivity стає видимоюЗапуск анімацій, реєстрація BroadCastReceiver
onResumeActivity отримує фокус введенняЗапуск камери, сенсорів, анімацій
onPauseActivity втрачає фокус (частково видима)Збереження чернеток, зупинка анімацій
onStopActivity не видимаЗвільнення ресурсів, зупинка оновлень
onDestroyActivity знищуєтьсяОчищення всіх посилань, відписка від LiveData
onRestartВикликається перед onStart після onStopПовторна ініціалізація

Важливо: onSaveInstanceState викликається до onStop для збереження тимчасового стану. Відновлення відбувається в onCreate через Bundle savedInstanceState або через SavedStateHandle в ViewModel. Без правильної обробки життєвого циклу при повороті екрану застосунок втратить всі незбережені дані.

kotlin
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }
    override fun onSaveInstanceState(outState: Bundle) {
        super.onSaveInstanceState(outState)
        outState.putString("draft", draftText)
    }
    override fun onDestroy() {
        super.onDestroy()
        // Отписка от всех подписок
    }
}

Activity Lifecycle в Jetpack Compose

В Jetpack Compose життєвий цикл Activity залишається незмінним, але Compose надає додаткові інструменти: Lifecycle-aware composition через LifecycleOwner, ефекти LifecycleEventEffect та DisposableEffect для автоматичного очищення ресурсів при знищенні.

Fragment Lifecycle у всіх деталях

Fragment в Android живе всередині Activity і має свій життєвий цикл, який частково збігається з Activity, але додає нові методи. Fragments можуть бути додані, замінені, видалені без знищення Activity, що робить їх більш гнучкими, але й більш складними.

Основні методи Fragment Lifecycle: onAttach — Fragment прикріплений до Activity (перший виклик); onCreate — ініціалізація даних; onCreateView — створення View; onViewCreated — View створена, можна налаштовувати UI; onStart — Fragment видимий; onResume — Fragment у фокусі; onPause — Fragment втрачає фокус; onStop — Fragment не видимий; onDestroyView — View знищується; onDestroy — Fragment знищується; onDetach — Fragment відкріплений від Activity.

Ключова відмінність від Activity: onCreateView та onDestroyView можуть викликатися кілька разів (наприклад, при перемиканні TabLayout), в той час як onCreate викликається один раз. Відповідно, ініціалізацію View потрібно робити в onViewCreated, а не в onCreateView. Ресурси, пов'язані з View (наприклад, адаптери RecyclerView), повинні очищатися в onDestroyView.

ViewController Lifecycle в iOS

UIViewController — базовий клас для керування екранами в iOS. Його життєвий цикл складається з послідовності методів, які UIKit викликає автоматично. Розуміння цього циклу критично важливе для правильної ініціалізації UI, роботи з даними та пам'яттю.

Метод Коли викликається Типове використання
loadViewКоли View Controller завантажує свою ієрархію ViewКастомна ініціалізація без storyboard
viewDidLoadПісля завантаження View в пам'ять (один раз)Налаштування UI, завантаження початкових даних
viewWillAppearПеред появою View на екраніОновлення даних, підписка на сповіщення
viewDidAppearПісля появи View на екраніЗапуск анімацій, старт анімацій трекінгу
viewWillDisappearПеред зникненням View з екрануЗбереження стану, відписка від сповіщень
viewDidDisappearПісля зникнення View з екрануЗупинка анімацій, звільнення ресурсів
deallocПри знищенні View ControllerЗвільнення всіх ресурсів

Важливо: viewDidLoad викликається тільки один раз за життя View Controller. Для оновлення даних при кожній появі використовуйте viewWillAppear. Якщо ви підписуєтеся на NotificationCenter в viewWillAppear, обов'язково відписуйтеся в viewDidDisappear, щоб уникнути витоків пам'яті.

SwiftUI Lifecycle

SwiftUI керує життєвим циклом View через структури View. Замість методів-колбеків SwiftUI використовує модифікатори onAppear та onDisappear. Для глобальних станів застосунку використовується App Lifecycle через протоколи App та Scene. SwiftUI автоматично керує створенням та знищенням View на основі стану, що спрощує розробку, але вимагає розуміння identity та lifetime View.

swift
struct ContentView: View {
    var body: some View {
        Text("Hello")
            .onAppear {
                print("View появилась")
            }
            .onDisappear {
                print("View исчезла")
            }
    }
}

LifecycleOwner та LifecycleObserver в Android

LifecycleOwner — інтерфейс з Android Architecture Components, який маркує об'єкт, що має життєвий цикл (Activity, Fragment). LifecycleObserver — інтерфейс, що дозволяє об'єкту підписуватися на події LifecycleOwner. Разом вони формують основу реактивного керування життєвим циклом в сучасній Android-розробці.

Замість явного виклику методів в onStart/onStop рекомендується використовувати DefaultLifecycleObserver (заміна застарілого LifecycleObserver з анотаціями @OnLifecycleEvent). Це підхід, який просуває Google для ViewModel та інших компонентів, які повинні реагувати на життєвий цикл, не маючи прямих посилань на Activity або Fragment.

kotlin
class MyObserver : DefaultLifecycleObserver {
    override fun onStart(owner: LifecycleOwner) {
        // Подписка на обновления
    }
    override fun onStop(owner: LifecycleOwner) {
        // Отписка
    }
}

В IT Sectr ми використовуємо LifecycleOwner у всіх проектах на Android. ViewModel підписується на LifecycleOwner Activity через viewModelScope та lifecycleScope, що гарантує автоматичне скасування корутин при знищенні Activity. Це запобігає витокам пам'яті та робить код чистішим і безпечнішим.

Часто задавані питання

Які стани проходить Activity в Android?

Activity проходить шість станів: Created (onCreate), Started (onStart), Resumed (onResume), Paused (onPause), Stopped (onStop), Destroyed (onDestroy).

В якому порядку викликаються методи ViewController Lifecycle в iOS?

Порядок: loadView → viewDidLoad → viewWillAppear → viewDidAppear → viewWillDisappear → viewDidDisappear. viewDidLoad викликається один раз.

Що таке LifecycleOwner в Android?

LifecycleOwner — компонент Android Architecture Components, який володіє життєвим циклом Activity або Fragment. Дозволяє підписуватися на події через LifecycleObserver.

Які стани має App Lifecycle в iOS?

iOS застосунок проходить п'ять станів: Not Running, Inactive, Active, Background, Suspended. Переходи керуються через UIApplicationDelegate.

Що таке Saved State на Android?

Saved State — механізм Android для збереження стану Activity/Fragment при повороті екрану або перестворенні процесу. Використовує onSaveInstanceState та SavedStateHandle.

Підсумки

  • Activity Lifecycle в Android (onCreate → onDestroy) — основа керування станом екрану
  • iOS ViewController Lifecycle (viewDidLoad → viewDidDisappear) — ключ до правильної роботи UIKit
  • Fragment Lifecycle складніший за Activity через onAttach/onDetach та onCreateView/onDestroyView
  • LifecycleOwner (Android) дозволяє реактивно підписуватися на події без витоків пам'яті
  • App Lifecycle керує станом всього застосунку (Active, Background, Suspended)
  • SwiftUI використовує onAppear та onDisappear замість традиційних методів ViewController
  • Правильна робота з життєвим циклом запобігає до 80% типових крашів мобільних застосунків

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект