Sobes.tech
Junior

Kun je vertellen over de levenscyclus van een iOS-app?

sobes.tech AI

Antwoord van AI

De toepassing doorloopt de volgende toestanden:

  • Niet actief: De toepassing is niet gestart.
  • Inactief: De toepassing is gestart, maar ontvangt geen gebeurtenissen (bijvoorbeeld tijdens een inkomend gesprek of bij het overschakelen naar de achtergrond).
  • Actief: De toepassing is actief en volledig functioneel. Ontvangt alle gebeurtenissen.
  • Achtergrond: De toepassing bevindt zich in de achtergrondmodus. Kan beperkte code uitvoeren of worden gepauzeerd.
  • Gepauzeerd: De toepassing in de achtergrondmodus, maar de uitvoering is door het systeem gepauzeerd om bronnen te besparen.

Overgangen tussen toestanden en de bijbehorende gebeurtenissen worden beheerd door het systeemframework UIKit (of SwiftUI) en de delegate van de toepassing (UIApplicationDelegate of @main Struct in SwiftUI).

Belangrijke methoden van de toepassing delegate:

  • application:didFinishLaunchingWithOptions:: De toepassing is gestart.
  • applicationDidBecomeActive:: De toepassing wordt actief.
  • applicationWillResignActive:: De toepassing gaat van de actieve staat (bijvoorbeeld tijdens een inkomend gesprek).
  • applicationDidEnterBackground:: De toepassing gaat naar de achtergrond.
  • applicationWillEnterForeground:: De toepassing gaat van de achtergrond naar actief.
  • applicationWillTerminate:: De toepassing wordt afgesloten.

Voorbeeld van gebruik in App Delegate:

import UIKit

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Uitgevoerd bij het starten van de toepassing
        print("Toepassing gestart")
        return true
    }

    func applicationDidBecomeActive(_ application: UIApplication) {
        // De toepassing is actief geworden
        print("Toepassing is actief geworden")
    }

    func applicationWillResignActive(_ application: UIApplication) {
        // De toepassing verlaat de actieve staat
        print("Toepassing verlaat actieve staat")
    }

    func applicationDidEnterBackground(_ application: UIApplication) {
        // De toepassing is naar de achtergrond gegaan
        print("Toepassing is naar de achtergrond gegaan")
    }

    func applicationWillEnterForeground(_ application: UIApplication) {
        // De toepassing komt naar voren
        print("Toepassing komt naar voren")
    }

    func applicationWillTerminate(_ application: UIApplication) {
        // De toepassing wordt afgesloten
        print("Toepassing wordt afgesloten")
    }
}

In SwiftUI wordt de levenscyclus beheerd met de structuur met @main en methoden zoals onAppear, onDisappear, onChange. Ook zijn er Environment-waarden die het toestandsniveau van de scène (ScenePhase) volgen.

import SwiftUI

@main
struct MyApp: App {
    @Environment(\.scenePhase) var scenePhase // Volgen van de scène status

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
        .onChange(of: scenePhase) { newPhase in
            if newPhase == .active {
                // Scene is actief geworden
                print("Scene is actief geworden")
            } else if newPhase == .inactive {
                // Scene is inactief geworden
                print("Scene is inactief geworden")
            } else if newPhase == .background {
                // Scene is naar de achtergrond gegaan
                print("Scene is naar de achtergrond gegaan")
            }
        }
    }
}