Sobes.tech
Junior

Tudnál beszélni egy iOS alkalmazás életciklusáról?

sobes.tech MI

Válasz az MI-től

Az alkalmazás a következő állapotokon megy keresztül:

  • Nem fut: Az alkalmazás nincs indítva.
  • Inaktív: Az alkalmazás fut, de nem fogad eseményeket (pl. bejövő hívás vagy háttérbe lépés idején).
  • Aktív: Az alkalmazás aktív és teljesen működőképes. Minden eseményt fogad.
  • Háttér: Az alkalmazás háttérben fut. Korlátozott kódot hajthat végre vagy szünetelhet.
  • Felfüggesztett: Az alkalmazás háttérben van, de végrehajtását a rendszer felfüggeszti az erőforrások takarékossága érdekében.

A állapotok közötti átmeneteket és az ezekhez kapcsolódó eseményeket a UIKit (vagy SwiftUI) rendszerkeretrendszer és az alkalmazás delegátusa (UIApplicationDelegate vagy @main Struct SwiftUI-ban) kezeli.

Az alkalmazás delegátusának kulcsfontosságú módszerei:

  • application:didFinishLaunchingWithOptions:: Az alkalmazás elindul.
  • applicationDidBecomeActive:: Az alkalmazás aktiválódik.
  • applicationWillResignActive:: Az alkalmazás elhagyja az aktív állapotot (pl. bejövő hívás esetén).
  • applicationDidEnterBackground:: Az alkalmazás háttérbe lép.
  • applicationWillEnterForeground:: Az alkalmazás a háttérből az előtérbe lép.
  • applicationWillTerminate:: Az alkalmazás befejeződik.

Példa az App Delegate-ben:

import UIKit

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Az alkalmazás indításakor fut
        print("Az alkalmazás elindult")
        return true
    }

    func applicationDidBecomeActive(_ application: UIApplication) {
        // Az alkalmazás aktiválódott
        print("Az alkalmazás aktiválódott")
    }

    func applicationWillResignActive(_ application: UIApplication) {
        // Az alkalmazás elhagyja az aktív állapotot
        print("Az alkalmazás elhagyja az aktív állapotot")
    }

    func applicationDidEnterBackground(_ application: UIApplication) {
        // Az alkalmazás háttérbe lépett
        print("Az alkalmazás háttérbe lépett")
    }

    func applicationWillEnterForeground(_ application: UIApplication) {
        // Az alkalmazás az előtérbe lép
        print("Az alkalmazás az előtérbe lépett")
    }

    func applicationWillTerminate(_ application: UIApplication) {
        // Az alkalmazás befejeződik
        print("Az alkalmazás befejeződik")
    }
}

SwiftUI-ban az életciklus a @main struktúrával és olyan módszerekkel van kezelve, mint az onAppear, onDisappear, onChange. Emellett elérhetők a Környezetértékek (Environment Values), amelyek lehetővé teszik a jelenet állapotának figyelését (ScenePhase).

import SwiftUI

@main
struct MyApp: App {
    @Environment(\.scenePhase) var scenePhase // A jelenet állapotának figyelése

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
        .onChange(of: scenePhase) { newPhase in
            if newPhase == .active {
                // A jelenet aktívvá vált
                print("A jelenet aktívvá vált")
            } else if newPhase == .inactive {
                // A jelenet inaktívvá vált
                print("A jelenet inaktívvá vált")
            } else if newPhase == .background {
                // A jelenet háttérbe került
                print("A jelenet háttérbe került")
            }
        }
    }
}