Sobes.tech
Junior

Poți să vorbești despre ciclul de viață al unei aplicații iOS?

sobes.tech AI

Răspuns de la AI

Aplicația trece prin următoarele stări:

  • Nu rulează: Aplicația nu este pornită.
  • Inactiv: Aplicația este pornită, dar nu primește evenimente (de exemplu, în timpul unui apel de intrare sau trecerea în modul de fundal).
  • Activ: Aplicația este activă și complet funcțională. Primește toate evenimentele.
  • Fundal: Aplicația se află în modul de fundal. Poate executa cod limitat sau poate fi suspendată.
  • Suspendat: Aplicația în modul de fundal, dar execuția sa este suspendată de sistem pentru economisirea resurselor.

Tranzițiile între stări și evenimentele asociate sunt gestionate de cadrul sistemului UIKit (sau SwiftUI) și delegatul aplicației (UIApplicationDelegate sau @main Struct în SwiftUI).

Metode cheie ale delegatului aplicației:

  • application:didFinishLaunchingWithOptions:: Aplicația a fost lansată.
  • applicationDidBecomeActive:: Aplicația devine activă.
  • applicationWillResignActive:: Aplicația trece din starea activă (de exemplu, în timpul unui apel de intrare).
  • applicationDidEnterBackground:: Aplicația trece în fundal.
  • applicationWillEnterForeground:: Aplicația trece din fundal în activ.
  • applicationWillTerminate:: Aplicația se încheie.

Exemplu de utilizare în App Delegate:

import UIKit

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Se execută la pornirea aplicației
        print("Aplicație lansată")
        return true
    }

    func applicationDidBecomeActive(_ application: UIApplication) {
        // Aplicația a devenit activă
        print("Aplicație activă")
    }

    func applicationWillResignActive(_ application: UIApplication) {
        // Aplicația părăsește starea activă
        print("Aplicație părăsește starea activă")
    }

    func applicationDidEnterBackground(_ application: UIApplication) {
        // Aplicația a trecut în fundal
        print("Aplicație în fundal")
    }

    func applicationWillEnterForeground(_ application: UIApplication) {
        // Aplicația revine în prim-plan
        print("Aplicație revine în prim-plan")
    }

    func applicationWillTerminate(_ application: UIApplication) {
        // Aplicația se încheie
        print("Aplicație se încheie")
    }
}

În SwiftUI, ciclul de viață este gestionat cu structura cu @main și metode precum onAppear, onDisappear, onChange. De asemenea, valorile de mediu permit monitorizarea stării scenei (ScenePhase).

import SwiftUI

@main
struct MyApp: App {
    @Environment(\.scenePhase) var scenePhase // Monitorizarea stării scenei

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
        .onChange(of: scenePhase) { newPhase in
            if newPhase == .active {
                // Scena a devenit activă
                print("Scena a devenit activă")
            } else if newPhase == .inactive {
                // Scena a devenit inactivă
                print("Scena a devenit inactivă")
            } else if newPhase == .background {
                // Scena a trecut în fundal
                print("Scena a trecut în fundal")
            }
        }
    }
}