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")
}
}
}
}