Sobes.tech
Junior

Μπορείς να μιλήσεις για τον κύκλο ζωής μιας εφαρμογής iOS;

sobes.tech AI

Απάντηση από AI

Η εφαρμογή περνάει από τις ακόλουθες καταστάσεις:

  • Δεν τρέχει: Η εφαρμογή δεν είναι ενεργή.
  • Ανενεργή: Η εφαρμογή τρέχει, αλλά δεν λαμβάνει γεγονότα (π.χ., κατά τη διάρκεια εισερχόμενης κλήσης ή μετάβασης σε λειτουργία υπόβαθρου).
  • Ενεργή: Η εφαρμογή είναι ενεργή και πλήρως λειτουργική. Λαμβάνει όλα τα γεγονότα.
  • Υπόβαθρο: Η εφαρμογή βρίσκεται σε λειτουργία υπόβαθρου. Μπορεί να εκτελεί περιορισμένο κώδικα ή να παγώνει.
  • Αναστολή: Η εφαρμογή βρίσκεται σε λειτουργία υπόβαθρου, αλλά η εκτέλεσή της έχει ανασταλεί από το σύστημα για εξοικονόμηση πόρων.

Οι μεταβάσεις μεταξύ καταστάσεων και τα γεγονότα που σχετίζονται με αυτές διαχειρίζονται από το πλαίσιο του συστήματος UIKit (ή SwiftUI) και τον διαχειριστή της εφαρμογής (UIApplicationDelegate ή @main Struct στο SwiftUI).

Βασικές μέθοδοι του διαχειριστή της εφαρμογής:

  • application:didFinishLaunchingWithOptions:: Η εφαρμογή ξεκινά.
  • applicationDidBecomeActive:: Η εφαρμογή γίνεται ενεργή.
  • applicationWillResignActive:: Η εφαρμογή μεταβαίνει από την ενεργή κατάσταση (π.χ., κατά την εισερχόμενη κλήση).
  • applicationDidEnterBackground:: Η εφαρμογή μεταβαίνει σε λειτουργία υπόβαθρου.
  • applicationWillEnterForeground:: Η εφαρμογή μεταβαίνει από το υπόβαθρο σε ενεργή.
  • applicationWillTerminate:: Η εφαρμογή τερματίζεται.

Παράδειγμα χρήσης στο App Delegate:

import UIKit

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Εκτελείται κατά την εκκίνηση της εφαρμογής
        print("Η εφαρμογή ξεκινά")
        return true
    }

    func applicationDidBecomeActive(_ application: UIApplication) {
        // Η εφαρμογή έγινε ενεργή
        print("Η εφαρμογή έγινε ενεργή")
    }

    func applicationWillResignActive(_ application: UIApplication) {
        // Η εφαρμογή μεταβαίνει από την ενεργή κατάσταση
        print("Η εφαρμογή μεταβαίνει από την ενεργή κατάσταση")
    }

    func applicationDidEnterBackground(_ application: UIApplication) {
        // Η εφαρμογή μεταβαίνει σε λειτουργία υπόβαθρου
        print("Η εφαρμογή μεταφέρθηκε σε υπόβαθρο")
    }

    func applicationWillEnterForeground(_ application: UIApplication) {
        // Η εφαρμογή μεταβαίνει στην μπροστινή όψη
        print("Η εφαρμογή μεταβαίνει στην μπροστινή όψη")
    }

    func applicationWillTerminate(_ application: UIApplication) {
        // Η εφαρμογή τερματίζεται
        print("Η εφαρμογή τερματίζεται")
    }
}

Στο SwiftUI, ο κύκλος ζωής διαχειρίζεται από τη δομή με @main και μεθόδους όπως onAppear, onDisappear, onChange. Επιπλέον, διατίθενται τιμές περιβάλλοντος (Environment Values) που επιτρέπουν την παρακολούθηση της κατάστασης της σκηνής (ScenePhase).

import SwiftUI

@main
struct MyApp: App {
    @Environment(\.scenePhase) var scenePhase // Παρακολούθηση κατάστασης σκηνής

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
        .onChange(of: scenePhase) { newPhase in
            if newPhase == .active {
                // Η σκηνή έγινε ενεργή
                print("Η σκηνή έγινε ενεργή")
            } else if newPhase == .inactive {
                // Η σκηνή έγινε ανενεργή
                print("Η σκηνή έγινε ανενεργή")
            } else if newPhase == .background {
                // Η σκηνή μεταφέρθηκε σε υπόβαθρο
                print("Η σκηνή μεταφέρθηκε σε υπόβαθρο")
            }
        }
    }
}