Sobes.tech
Junior

Puoi parlare del ciclo di vita di un'app iOS?

sobes.tech AI

Risposta dell'AI

L'applicazione attraversa i seguenti stati:

  • Non in esecuzione: L'applicazione non è avviata.
  • Inattiva: L'applicazione è avviata, ma non riceve eventi (ad esempio, durante una chiamata in arrivo o passando in background).
  • Attiva: L'applicazione è attiva e completamente funzionale. Riceve tutti gli eventi.
  • Background: L'applicazione si trova in modalità background. Può eseguire codice limitato o essere sospesa.
  • Sospesa: L'applicazione in modalità background, ma la sua esecuzione è sospesa dal sistema per risparmiare risorse.

Le transizioni tra stati e gli eventi associati sono gestiti dal framework di sistema UIKit (o SwiftUI) e dal delegato dell'app (UIApplicationDelegate o @main Struct in SwiftUI).

Metodi chiave del delegato dell'app:

  • application:didFinishLaunchingWithOptions:: L'applicazione è stata avviata.
  • applicationDidBecomeActive:: L'applicazione diventa attiva.
  • applicationWillResignActive:: L'applicazione passa dallo stato attivo (ad esempio, durante una chiamata in arrivo).
  • applicationDidEnterBackground:: L'applicazione passa in background.
  • applicationWillEnterForeground:: L'applicazione passa dal background all'attivo.
  • applicationWillTerminate:: L'applicazione termina.

Esempio di utilizzo nel App Delegate:

import UIKit

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Eseguito all'avvio dell'app
        print("Applicazione avviata")
        return true
    }

    func applicationDidBecomeActive(_ application: UIApplication) {
        // L'app è diventata attiva
        print("L'app è diventata attiva")
    }

    func applicationWillResignActive(_ application: UIApplication) {
        // L'app passa dallo stato attivo
        print("L'app passa dallo stato attivo")
    }

    func applicationDidEnterBackground(_ application: UIApplication) {
        // L'app è passata in background
        print("L'app è passata in background")
    }

    func applicationWillEnterForeground(_ application: UIApplication) {
        // L'app passa in primo piano
        print("L'app passa in primo piano")
    }

    func applicationWillTerminate(_ application: UIApplication) {
        // L'app termina
        print("L'app termina")
    }
}

In SwiftUI, il ciclo di vita è gestito con la struttura con @main e metodi come onAppear, onDisappear, onChange. Sono disponibili anche i Valori di Ambiente, che consentono di monitorare lo stato della scena (ScenePhase).

import SwiftUI

@main
struct MyApp: App {
    @Environment(\.scenePhase) var scenePhase // Monitoraggio dello stato della scena

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
        .onChange(of: scenePhase) { newPhase in
            if newPhase == .active {
                // La scena è diventata attiva
                print("La scena è diventata attiva")
            } else if newPhase == .inactive {
                // La scena è diventata inattiva
                print("La scena è diventata inattiva")
            } else if newPhase == .background {
                // La scena è passata in background
                print("La scena è passata in background")
            }
        }
    }
}