Sobes.tech
Junior

Môžeš opísať životný cyklus aplikácie na iOS?

sobes.tech AI

Odpoveď od AI

Aplikácia prechádza nasledujúcimi stavmi:

  • Nie je spustená: Aplikácia nie je spustená.
  • Neaktívna: Aplikácia je spustená, ale neprijíma udalosti (napríklad počas prichádzajúceho hovoru alebo prechodu do režimu na pozadí).
  • Aktívna: Aplikácia je aktívna a plne funkčná. Prijíma všetky udalosti.
  • Na pozadí: Aplikácia je v režime na pozadí. Môže vykonávať obmedzený kód alebo byť pozastavená.
  • Pozastavená: Aplikácia je v režime na pozadí, ale jej vykonávanie je systémom pozastavené na úsporu zdrojov.

Prechody medzi stavmi a s nimi súvisiace udalosti riadi systémový rámec UIKit (alebo SwiftUI) a delegát aplikácie (UIApplicationDelegate alebo @main Struct v SwiftUI).

Kľúčové metódy delegáta aplikácie:

  • application:didFinishLaunchingWithOptions:: Aplikácia je spustená.
  • applicationDidBecomeActive:: Aplikácia sa stáva aktívnou.
  • applicationWillResignActive:: Aplikácia prechádza z aktívneho do neaktívneho stavu (napríklad pri prichádzajúcom hovore).
  • applicationDidEnterBackground:: Aplikácia prechádza do režimu na pozadí.
  • applicationWillEnterForeground:: Aplikácia prechádza z režimu na pozadí do aktívneho.
  • applicationWillTerminate:: Aplikácia sa ukončuje.

Príklad použitia v App Delegate:

import UIKit

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Beží pri spustení aplikácie
        print("Aplikácia bola spustená")
        return true
    }

    func applicationDidBecomeActive(_ application: UIApplication) {
        // Aplikácia sa stala aktívnou
        print("Aplikácia je aktívna")
    }

    func applicationWillResignActive(_ application: UIApplication) {
        // Aplikácia prechádza z aktívneho do neaktívneho stavu
        print("Aplikácia prechádza do neaktívneho stavu")
    }

    func applicationDidEnterBackground(_ application: UIApplication) {
        // Aplikácia prechádza do režimu na pozadí
        print("Aplikácia prešla do pozadia")
    }

    func applicationWillEnterForeground(_ application: UIApplication) {
        // Aplikácia prechádza z pozadia do popredia
        print("Aplikácia prechádza do popredia")
    }

    func applicationWillTerminate(_ application: UIApplication) {
        // Aplikácia sa zatvára
        print("Aplikácia sa zatvára")
    }
}

V SwiftUI je životný cyklus riadený štruktúrou s @main a metódami ako onAppear, onDisappear, onChange. Sú dostupné aj Environment Values, ktoré umožňujú sledovať stav scény (ScenePhase).

import SwiftUI

@main
struct MyApp: App {
    @Environment(\.scenePhase) var scenePhase // Sledovanie stavu scény

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
        .onChange(of: scenePhase) { newPhase in
            if newPhase == .active {
                // Scéna sa stala aktívnou
                print("Scéna sa stala aktívnou")
            } else if newPhase == .inactive {
                // Scéna sa stala neaktívnou
                print("Scéna sa stala neaktívnou")
            } else if newPhase == .background {
                // Scéna prešla do režimu na pozadí
                print("Scéna prešla do pozadia")
            }
        }
    }
}