Sobes.tech
Junior

Kannst du den Lebenszyklus einer iOS-Anwendung erklären?

sobes.tech KI

Antwort von AI

Die Anwendung durchläuft die folgenden Zustände:

  • Nicht ausgeführt: Die Anwendung ist nicht gestartet.
  • Inaktiv: Die Anwendung ist gestartet, empfängt aber keine Ereignisse (z.B. während eines eingehenden Anrufs oder beim Wechsel in den Hintergrund).
  • Aktiv: Die Anwendung ist aktiv und voll funktionsfähig. Sie empfängt alle Ereignisse.
  • Hintergrund: Die Anwendung befindet sich im Hintergrundmodus. Sie kann eingeschränkten Code ausführen oder pausieren.
  • Angehalten: Die Anwendung im Hintergrundmodus, aber ihre Ausführung wird vom System zur Ressourceneinsparung pausiert.

Übergänge zwischen Zuständen und die damit verbundenen Ereignisse werden vom System-Framework UIKit (oder SwiftUI) und dem Anwendungsdelegierten (UIApplicationDelegate oder @main Struct in SwiftUI) verwaltet.

Wichtige Methoden des Anwendungsdelegierten:

  • application:didFinishLaunchingWithOptions:: Die Anwendung wurde gestartet.
  • applicationDidBecomeActive:: Die Anwendung wird aktiv.
  • applicationWillResignActive:: Die Anwendung wechselt vom aktiven Zustand (z.B. bei eingehendem Anruf).
  • applicationDidEnterBackground:: Die Anwendung wechselt in den Hintergrund.
  • applicationWillEnterForeground:: Die Anwendung wechselt vom Hintergrund in den Vordergrund.
  • applicationWillTerminate:: Die Anwendung wird beendet.

Beispiel für die Verwendung im App Delegate:

import UIKit

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Wird beim Start der Anwendung ausgeführt
        print("Anwendung gestartet")
        return true
    }

    func applicationDidBecomeActive(_ application: UIApplication) {
        // Die Anwendung ist aktiv geworden
        print("Die Anwendung ist aktiv geworden")
    }

    func applicationWillResignActive(_ application: UIApplication) {
        // Die Anwendung wechselt vom aktiven Zustand
        print("Die Anwendung wechselt vom aktiven Zustand")
    }

    func applicationDidEnterBackground(_ application: UIApplication) {
        // Die Anwendung ist in den Hintergrund gewechselt
        print("Die Anwendung ist in den Hintergrund gewechselt")
    }

    func applicationWillEnterForeground(_ application: UIApplication) {
        // Die Anwendung wechselt in den Vordergrund
        print("Die Anwendung wechselt in den Vordergrund")
    }

    func applicationWillTerminate(_ application: UIApplication) {
        // Die Anwendung wird beendet
        print("Die Anwendung wird beendet")
    }
}

In SwiftUI wird der Lebenszyklus mit der Struktur mit @main und Methoden wie onAppear, onDisappear, onChange gesteuert. Environment-Werte ermöglichen es auch, den Zustand der Szene (ScenePhase) zu verfolgen.

import SwiftUI

@main
struct MyApp: App {
    @Environment(\.scenePhase) var scenePhase // Überwachung des Szenenstatus

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
        .onChange(of: scenePhase) { newPhase in
            if newPhase == .active {
                // Szene wurde aktiv
                print("Szene wurde aktiv")
            } else if newPhase == .inactive {
                // Szene wurde inaktiv
                print("Szene wurde inaktiv")
            } else if newPhase == .background {
                // Szene ist im Hintergrund
                print("Szene ist im Hintergrund")
            }
        }
    }
}