Cykl życia w tworzeniu aplikacji mobilnych: co to jest, jakie etapy i jak działa

Autor: IT Sectr Opublikowano: 2026-03-02 Czas czytania: 9 min

Cykl życia aplikacji mobilnej określa, jak zachowuje się ona podczas uruchamiania, minimalizowania, powrotu z tła i zamykania. W tym artykule omówimy App Lifecycle (iOS), Activity Lifecycle (Android), Fragment Lifecycle, ViewController Lifecycle i LifecycleOwner. Zrozumienie tych procesów jest kluczowe dla zapobiegania wyciekom pamięci, utracie danych i nieprawidłowemu działaniu aplikacji. Więcej szczegółów w oficjalnej dokumentacji Android Activity Lifecycle.

Najważniejsze

  • Activity Lifecycle (Android) obejmuje 7 metod: onCreate → onStart → onResume → onPause → onStop → onDestroy + onRestart
  • ViewController Lifecycle (iOS) wywoływany w kolejności: viewDidLoad → viewWillAppear → viewDidAppear → viewWillDisappear → viewDidDisappear
  • iOS App Lifecycle ma 5 stanów: Not Running, Inactive, Active, Background, Suspended
  • Fragment Lifecycle jest powiązany z Activity, ale ma własne metody: onAttach, onCreateView, onViewCreated
  • LifecycleOwner (Android) umożliwia subskrybowanie zdarzeń cyklu życia przez LifecycleObserver

Cykl życia aplikacji (App Lifecycle)

Zanim przejdziemy do cyklu życia poszczególnych ekranów, ważne jest zrozumienie cyklu życia całej aplikacji. W iOS aplikacja przechodzi przez pięć stanów: Not Running (nie uruchomiona), Inactive (w tle, nie odbiera zdarzeń), Active (aktywna), Background (w tle, kod jest wykonywany) i Suspended (w tle, kod zawieszony). Te stany są zarządzane w AppDelegate przez metody applicationDidFinishLaunching, applicationDidBecomeActive, applicationWillResignActive, applicationDidEnterBackground i applicationWillTerminate.

W Android odpowiednikiem jest Application Lifecycle, śledzony przez interfejs Application.ActivityLifecycleCallbacks. Jednak Android bardziej skupia się na cyklu życia Activity — pojedynczego ekranu aplikacji. Dzieje się tak, ponieważ aplikacja Android może składać się z wielu Activity, każde z własnym cyklem.

Nowoczesne podejście w Android to użycie ProcessLifecycleOwner z biblioteki lifecycle-process. Pozwala on śledzić stan całego procesu bez przywiązywania się do konkretnej Activity. W iOS do śledzenia stanu aplikacji używa się UISceneDelegate (od iOS 13) lub AppDelegate. SceneDelegate obsługuje wiele okien (multiwindow) na iPadzie. Zrozumienie App Lifecycle jest szczególnie ważne dla IT Sectr przy tworzeniu aplikacji z synchronizacją w tle, strumieniowaniem i połączeniami VoIP.

Activity Lifecycle w Android

Activity to podstawowy komponent aplikacji Android, reprezentujący jeden ekran. Activity ma jasno określony cykl życia zarządzany przez system operacyjny w odpowiedzi na działania użytkownika i zdarzenia systemowe (obrót ekranu, przychodzące połączenie, brak pamięci).

Metoda Opis Co robić
onCreateWywoływana raz przy tworzeniu ActivityInicjalizacja UI, findViewById, konfiguracja ViewModel
onStartActivity staje się widocznaUruchom animacje, zarejestruj BroadCastReceiver
onResumeActivity otrzymuje fokus wejściaUruchom kamerę, czujniki, animacje
onPauseActivity traci fokus (częściowo widoczna)Zapisz szkice, zatrzymaj animacje
onStopActivity nie jest widocznaZwolnij zasoby, zatrzymaj aktualizacje
onDestroyActivity jest niszczonaWyczyść wszystkie referencje, anuluj subskrypcję LiveData
onRestartWywoływana przed onStart po onStopPonowna inicjalizacja

Ważne: onSaveInstanceState jest wywoływana przed onStop w celu zapisania tymczasowego stanu. Przywracanie następuje w onCreate przez Bundle savedInstanceState lub przez SavedStateHandle w ViewModel. Bez prawidłowego obsłużenia cyklu życia aplikacja straci wszystkie niezapisane dane przy obrocie ekranu.

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 w Jetpack Compose

W Jetpack Compose cykl życia Activity pozostaje niezmieniony, ale Compose zapewnia dodatkowe narzędzia: Kompozycja świadoma cyklu życia przez LifecycleOwner, efekty LifecycleEventEffect i DisposableEffect do automatycznego czyszczenia zasobów przy zniszczeniu.

Fragment Lifecycle w szczegółach

Fragment w Android żyje wewnątrz Activity i ma własny cykl życia, który częściowo pokrywa się z Activity, ale dodaje nowe metody. Fragmenty mogą być dodawane, zastępowane, usuwane bez niszczenia Activity, co czyni je bardziej elastycznymi, ale także bardziej złożonymi.

Kluczowe metody Fragment Lifecycle: onAttach — Fragment dołączony do Activity (pierwsze wywołanie); onCreate — inicjalizacja danych; onCreateView — tworzenie View; onViewCreated — View utworzone, można konfigurować UI; onStart — Fragment widoczny; onResume — Fragment w fokusie; onPause — Fragment traci fokus; onStop — Fragment niewidoczny; onDestroyView — View niszczone; onDestroy — Fragment niszczony; onDetach — Fragment odłączony od Activity.

Kluczowa różnica od Activity: onCreateView i onDestroyView mogą być wywoływane wielokrotnie (np. przy przełączaniu TabLayout), podczas gdy onCreate jest wywoływany raz. W związku z tym inicjalizacja View powinna być wykonana w onViewCreated, a nie w onCreateView. Zasoby związane z View (np. adaptery RecyclerView) powinny być czyszczone w onDestroyView.

ViewController Lifecycle w iOS

UIViewController to klasa bazowa do zarządzania ekranami w iOS. Jego cykl życia składa się z sekwencji metod, które UIKit wywołuje automatycznie. Zrozumienie tego cyklu jest kluczowe dla prawidłowej inicjalizacji UI, zarządzania danymi i pamięcią.

Metoda Kiedy wywoływana Typowe użycie
loadViewGdy View Controller ładuje swoją hierarchię ViewNiestandardowa inicjalizacja bez storyboard
viewDidLoadPo załadowaniu View do pamięci (raz)Konfiguracja UI, załadowanie początkowych danych
viewWillAppearPrzed pojawieniem się View na ekranieAktualizacja danych, subskrypcja powiadomień
viewDidAppearPo pojawieniu się View na ekranieUruchomienie animacji, uruchomienie animacji śledzenia
viewWillDisappearPrzed zniknięciem View z ekranuZapisanie stanu, anulowanie subskrypcji powiadomień
viewDidDisappearPo zniknięciu View z ekranuZatrzymanie animacji, zwolnienie zasobów
deallocGdy View Controller jest niszczonyZwolnienie wszystkich zasobów

Ważne: viewDidLoad jest wywoływany tylko raz w ciągu życia View Controller. Do aktualizacji danych przy każdym pojawieniu się używaj viewWillAppear. Jeśli subskrybujesz NotificationCenter w viewWillAppear, pamiętaj o anulowaniu subskrypcji w viewDidDisappear, aby uniknąć wycieków pamięci.

SwiftUI Lifecycle

SwiftUI zarządza cyklem życia View przez struktury View. Zamiast metod callback, SwiftUI używa modyfikatorów onAppear i onDisappear. Dla globalnych stanów aplikacji używany jest App Lifecycle przez protokoły App i Scene. SwiftUI automatycznie zarządza tworzeniem i niszczeniem View na podstawie stanu, co upraszcza tworzenie, ale wymaga zrozumienia tożsamości i czasu życia View.

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

LifecycleOwner i LifecycleObserver w Android

LifecycleOwner to interfejs z Android Architecture Components, który oznacza obiekt mający cykl życia (Activity, Fragment). LifecycleObserver to interfejs umożliwiający obiektowi subskrybowanie zdarzeń LifecycleOwner. Razem stanowią podstawę reaktywnego zarządzania cyklem życia w nowoczesnym tworzeniu aplikacji Android.

Zamiast jawnego wywoływania metod w onStart/onStop, zaleca się używanie DefaultLifecycleObserver (zamiennika przestarzałego LifecycleObserver z adnotacjami @OnLifecycleEvent). Jest to podejście promowane przez Google dla ViewModel i innych komponentów, które muszą reagować na cykl życia bez posiadania bezpośrednich referencji do Activity lub Fragment.

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

W IT Sectr używamy LifecycleOwner we wszystkich projektach Android. ViewModel subskrybuje LifecycleOwner Activity przez viewModelScope i lifecycleScope, gwarantując automatyczne anulowanie korutyn przy zniszczeniu Activity. Zapobiega to wyciekom pamięci i sprawia, że kod jest czystszy i bezpieczniejszy.

Często zadawane pytania

Jakie stany przechodzi Activity w Android?

Activity przechodzi przez sześć stanów: Created (onCreate), Started (onStart), Resumed (onResume), Paused (onPause), Stopped (onStop), Destroyed (onDestroy).

W jakiej kolejności wywoływane są metody ViewController Lifecycle w iOS?

Kolejność: loadView → viewDidLoad → viewWillAppear → viewDidAppear → viewWillDisappear → viewDidDisappear. viewDidLoad jest wywoływany raz.

Czym jest LifecycleOwner w Android?

LifecycleOwner to komponent Android Architecture Components, który posiada cykl życia Activity lub Fragment. Umożliwia subskrybowanie zdarzeń przez LifecycleObserver.

Jakie stany ma App Lifecycle w iOS?

Aplikacja iOS przechodzi przez pięć stanów: Not Running, Inactive, Active, Background, Suspended. Przejścia są zarządzane przez UIApplicationDelegate.

Czym jest Saved State w Android?

Saved State to mechanizm Android do zachowywania stanu Activity/Fragment przy obrocie ekranu lub odtworzeniu procesu. Używa onSaveInstanceState i SavedStateHandle.

Podsumowanie

  • Activity Lifecycle w Android (onCreate → onDestroy) — podstawa zarządzania stanem ekranu
  • iOS ViewController Lifecycle (viewDidLoad → viewDidDisappear) — klucz do prawidłowego działania UIKit
  • Fragment Lifecycle jest bardziej złożony niż Activity z powodu onAttach/onDetach i onCreateView/onDestroyView
  • LifecycleOwner (Android) umożliwia reaktywną subskrypcję zdarzeń bez wycieków pamięci
  • App Lifecycle zarządza stanem całej aplikacji (Active, Background, Suspended)
  • SwiftUI używa onAppear i onDisappear zamiast tradycyjnych metod ViewController
  • Prawidłowe zarządzanie cyklem życia zapobiega do 80% typowych awarii aplikacji mobilnych

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt