Životní cyklus v mobilním vývoji: co to je, jaké fáze a jak funguje

Autor: IT Sectr Publikováno: 2026-03-02 Doba čtení: 9 min

Životní cyklus mobilní aplikace určuje, jak se chová při spuštění, minimalizaci, návratu z pozadí a zavření. V tomto článku si projdeme App Lifecycle (iOS), Activity Lifecycle (Android), Fragment Lifecycle, ViewController Lifecycle a LifecycleOwner. Porozumění těmto procesům je kriticky důležité pro prevenci úniků paměti, ztráty dat a nesprávného chování aplikace. Více podrobností v oficiální dokumentaci Android Activity Lifecycle.

Hlavní body

  • Activity Lifecycle (Android) zahrnuje 7 metod: onCreate → onStart → onResume → onPause → onStop → onDestroy + onRestart
  • ViewController Lifecycle (iOS) se volá v pořadí: viewDidLoad → viewWillAppear → viewDidAppear → viewWillDisappear → viewDidDisappear
  • iOS App Lifecycle má 5 stavů: Not Running, Inactive, Active, Background, Suspended
  • Fragment Lifecycle je vázán na Activity, ale má vlastní metody: onAttach, onCreateView, onViewCreated
  • LifecycleOwner (Android) umožňuje přihlášení k odběru událostí životního cyklu prostřednictvím LifecycleObserver

Životní cyklus aplikace (App Lifecycle)

Než se ponoříme do životního cyklu jednotlivých obrazovek, je důležité pochopit životní cyklus celé aplikace. V iOS aplikace prochází pěti stavy: Not Running (neběží), Inactive (na pozadí, nepřijímá události), Active (aktivní), Background (na pozadí, kód se provádí) a Suspended (na pozadí, kód je pozastaven). Tyto stavy jsou spravovány v AppDelegate prostřednictvím metod applicationDidFinishLaunching, applicationDidBecomeActive, applicationWillResignActive, applicationDidEnterBackground a applicationWillTerminate.

V Androidu je ekvivalentem Application Lifecycle, sledovaný prostřednictvím rozhraní Application.ActivityLifecycleCallbacks. Android se však více zaměřuje na životní cyklus Activity — jednotlivé obrazovky aplikace. Je to proto, že aplikace pro Android může sestávat z více Activities, každá s vlastním cyklem.

Moderní přístup v Androidu je použití ProcessLifecycleOwner z knihovny lifecycle-process. Umožňuje sledovat stav celého procesu bez vazby na konkrétní Activity. V iOS se pro sledování stavu aplikace používá UISceneDelegate (od iOS 13) nebo AppDelegate. SceneDelegate zpracovává více oken (multiwindow) na iPadu. Porozumění App Lifecycle je obzvláště důležité pro IT Sectr při vývoji aplikací s background synchronizací, streamováním a VoIP hovory.

Activity Lifecycle v Androidu

Activity je základní komponenta aplikace pro Android představující jednu obrazovku. Activity má jasně definovaný životní cyklus spravovaný operačním systémem v reakci na akce uživatele a systémové události (otočení obrazovky, příchozí hovor, nedostatek paměti).

Co dělat

MetodaPopis
onCreateVoláno jednou při vytvoření ActivityInicializace UI, findViewById, nastavení ViewModel
onStartActivity se stává viditelnouSpuštění animací, registrace BroadCastReceiver
onResumeActivity získává vstupní fokusSpuštění kamery, senzorů, animací
onPauseActivity ztrácí fokus (částečně viditelná)Uložení konceptů, zastavení animací
onStopActivity není viditelnáUvolnění prostředků, zastavení aktualizací
onDestroyActivity je zničenaVyčištění všech referencí, odhlášení odběru LiveData
onRestartVoláno před onStart po onStopOpětovná inicializace

Důležité: onSaveInstanceState je voláno před onStop pro uložení dočasného stavu. Obnovení probíhá v onCreate prostřednictvím Bundle savedInstanceState nebo prostřednictvím SavedStateHandle ve ViewModel. Bez správného zpracování životního cyklu aplikace při otočení obrazovky ztratí všechna neuložená data.

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

V Jetpack Compose zůstává životní cyklus Activity nezměněn, ale Compose poskytuje další nástroje: Složení uvědomující si životní cyklus prostřednictvím LifecycleOwner, efekty LifecycleEventEffect a DisposableEffect pro automatické čištění prostředků při zničení.

Fragment Lifecycle do detailu

Fragment v Androidu žije uvnitř Activity a má vlastní životní cyklus, který se částečně překrývá s Activity, ale přidává nové metody. Fragmenty lze přidávat, nahrazovat, odstraňovat bez zničení Activity, což je činí flexibilnějšími, ale také složitějšími.

Klíčové metody Fragment Lifecycle: onAttach — Fragment připojen k Activity (první volání); onCreate — inicializace dat; onCreateView — vytvoření View; onViewCreated — View vytvořeno, UI lze konfigurovat; onStart — Fragment viditelný; onResume — Fragment v fokusu; onPause — Fragment ztrácí fokus; onStop — Fragment není viditelný; onDestroyView — View zničeno; onDestroy — Fragment zničen; onDetach — Fragment odpojen od Activity.

Klíčový rozdíl od Activity: onCreateView a onDestroyView mohou být volány vícekrát (např. při přepínání TabLayout), zatímco onCreate je volán jednou. Inicializace View by proto měla být provedena v onViewCreated, ne v onCreateView. Prostředky související s View (jako adaptéry RecyclerView) by měly být vyčištěny v onDestroyView.

ViewController Lifecycle v iOS

UIViewController je základní třída pro správu obrazovek v iOS. Jeho životní cyklus se skládá z posloupnosti metod, které UIKit volá automaticky. Porozumění tomuto cyklu je klíčové pro správnou inicializaci UI, správu dat a paměti.

Typické použití

MetodaKdy je volána
loadViewKdyž View Controller načítá svou hierarchii ViewVlastní inicializace bez storyboard
viewDidLoadPo načtení View do paměti (jednou)Nastavení UI, načtení počátečních dat
viewWillAppearPřed zobrazením View na obrazovceAktualizace dat, přihlášení k odběru oznámení
viewDidAppearPo zobrazení View na obrazovceSpuštění animací, spuštění sledovacích animací
viewWillDisappearPřed zmizením View z obrazovkyUložení stavu, odhlášení odběru oznámení
viewDidDisappearPo zmizení View z obrazovkyZastavení animací, uvolnění prostředků
deallocKdyž je View Controller zničenUvolnění všech prostředků

Důležité: viewDidLoad je voláno pouze jednou za životnost View Controlleru. Pro aktualizaci dat při každém zobrazení použijte viewWillAppear. Pokud se přihlašujete k odběru NotificationCenter ve viewWillAppear, nezapomeňte se odhlásit ve viewDidDisappear, abyste předešli únikům paměti.

SwiftUI Lifecycle

SwiftUI spravuje životní cyklus View pomocí struktur View. Místo callback metod SwiftUI používá modifikátory onAppear a onDisappear. Pro globální stavy aplikace se používá App Lifecycle prostřednictvím protokolů App a Scene. SwiftUI automaticky spravuje vytváření a ničení View na základě stavu, což zjednodušuje vývoj, ale vyžaduje pochopení identity a životnosti View.

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

LifecycleOwner a LifecycleObserver v Androidu

LifecycleOwner je rozhraní z Android Architecture Components, které označuje objekt mající životní cyklus (Activity, Fragment). LifecycleObserver je rozhraní, které umožňuje objektu přihlásit se k odběru událostí LifecycleOwner. Společně tvoří základ reaktivního řízení životního cyklu v moderním vývoji pro Android.

Místo explicitního volání metod v onStart/onStop se doporučuje použít DefaultLifecycleObserver (náhrada za zastaralý LifecycleObserver s anotacemi @OnLifecycleEvent). Toto je přístup prosazovaný Googlem pro ViewModel a další komponenty, které potřebují reagovat na životní cyklus bez přímých referencí na Activity nebo Fragment.

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

V IT Sectr používáme LifecycleOwner ve všech Android projektech. ViewModel se přihlásí k odběru LifecycleOwner Activity prostřednictvím viewModelScope a lifecycleScope, což zaručuje automatické zrušení korutin při zničení Activity. Tím se předchází únikům paměti a kód je čistší a bezpečnější.

Často kladené dotazy

Jakými stavy prochází Activity v Androidu?

Activity prochází šesti stavy: Created (onCreate), Started (onStart), Resumed (onResume), Paused (onPause), Stopped (onStop), Destroyed (onDestroy).

V jakém pořadí se volají metody ViewController Lifecycle v iOS?

Pořadí: loadView → viewDidLoad → viewWillAppear → viewDidAppear → viewWillDisappear → viewDidDisappear. viewDidLoad je voláno jednou.

Co je LifecycleOwner v Androidu?

LifecycleOwner je komponenta Android Architecture Components, která vlastní životní cyklus Activity nebo Fragmentu. Umožňuje přihlášení k odběru událostí prostřednictvím LifecycleObserver.

Jaké stavy má App Lifecycle v iOS?

Aplikace pro iOS prochází pěti stavy: Not Running, Inactive, Active, Background, Suspended. Přechody jsou spravovány prostřednictvím UIApplicationDelegate.

Co je Saved State v Androidu?

Saved State je mechanismus Androidu pro zachování stavu Activity/Fragment při otočení obrazovky nebo obnovení procesu. Používá onSaveInstanceState a SavedStateHandle.

Shrnutí

  • Activity Lifecycle v Androidu (onCreate → onDestroy) — základ správy stavu obrazovky
  • iOS ViewController Lifecycle (viewDidLoad → viewDidDisappear) — klíč ke správnému fungování UIKit
  • Fragment Lifecycle je složitější než Activity kvůli onAttach/onDetach a onCreateView/onDestroyView
  • LifecycleOwner (Android) umožňuje reaktivní přihlášení k událostem bez úniků paměti
  • App Lifecycle spravuje stav celé aplikace (Active, Background, Suspended)
  • SwiftUI používá onAppear a onDisappear místo tradičních metod ViewController
  • Správné řízení životního cyklu zabraňuje až 80 % typických pádů mobilních aplikací

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt