Sobes.tech
Junior

Můžeš popsat životní cyklus aplikace na iOS?

sobes.tech AI

Odpověď od AI

Aplikace prochází následujícími stavy:

  • Není spuštěna: Aplikace není spuštěna.
  • Neaktivní: Aplikace je spuštěna, ale nepřijímá události (například při příchozím hovoru nebo přechodu do režimu na pozadí).
  • Aktivní: Aplikace je aktivní a plně funkční. Přijímá všechny události.
  • Na pozadí: Aplikace je v režimu na pozadí. Může vykonávat omezený kód nebo být pozastavena.
  • Pozastavena: Aplikace je v režimu na pozadí, ale její provádění je systémem pozastaveno za účelem úspory zdrojů.

Přechody mezi stavy a s nimi související události jsou řízeny systémovým rámcem UIKit (nebo SwiftUI) a delegátem aplikace (UIApplicationDelegate nebo @main Struct ve SwiftUI).

Klíčové metody delegáta aplikace:

  • application:didFinishLaunchingWithOptions:: Aplikace je spuštěna.
  • applicationDidBecomeActive:: Aplikace přechází do aktivního stavu.
  • applicationWillResignActive:: Aplikace přechází z aktivního stavu (například při příchozím hovoru).
  • applicationDidEnterBackground:: Aplikace přechází do režimu na pozadí.
  • applicationWillEnterForeground:: Aplikace přechází z režimu na pozadí do aktivního.
  • applicationWillTerminate:: Aplikace je ukončena.

Příklad použití v App Delegate:

import UIKit

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Běží při spuštění aplikace
        print("Aplikace byla spuštěna")
        return true
    }

    func applicationDidBecomeActive(_ application: UIApplication) {
        // Aplikace se stala aktivní
        print("Aplikace je aktivní")
    }

    func applicationWillResignActive(_ application: UIApplication) {
        // Aplikace přechází z aktivního stavu
        print("Aplikace přechází z aktivního stavu")
    }

    func applicationDidEnterBackground(_ application: UIApplication) {
        // Aplikace přechází do režimu na pozadí
        print("Aplikace přechází do pozadí")
    }

    func applicationWillEnterForeground(_ application: UIApplication) {
        // Aplikace přechází z pozadí do popředí
        print("Aplikace přechází do popředí")
    }

    func applicationWillTerminate(_ application: UIApplication) {
        // Aplikace se ukončuje
        print("Aplikace se ukončuje")
    }
}

V SwiftUI je životní cyklus řízen strukturou s @main a metodami jako onAppear, onDisappear, onChange. Kromě toho jsou k dispozici Environment Values, které umožňují sledovat stav scény (ScenePhase).

import SwiftUI

@main
struct MyApp: App {
    @Environment(\.scenePhase) var scenePhase // Sledování stavu scény

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
        .onChange(of: scenePhase) { newPhase in
            if newPhase == .active {
                // Scéna se stala aktivní
                print("Scéna se stala aktivní")
            } else if newPhase == .inactive {
                // Scéna se stala neaktivní
                print("Scéna se stala neaktivní")
            } else if newPhase == .background {
                // Scéna přechází do režimu na pozadí
                print("Scéna přechází do režimu na pozadí")
            }
        }
    }
}