Sobes.tech
Junior

Ar galite papasakoti apie iOS programėlės gyvavimo ciklą?

sobes.tech AI

Atsakymas iš AI

Programėlė pereina per šiuos būsenas:

  • Nėra veikimo: Programėlė nėra paleista.
  • Neaktyvi: Programėlė paleista, bet negauna įvykių (pvz., įeinančio skambučio metu arba pereinant į foninį režimą).
  • Aktyvi: Programėlė yra aktyvi ir visiškai funkcionali. Gaukia visus įvykius.
  • Fone: Programėlė yra foniniame režime. Gali vykdyti ribotą kodą arba būti sustabdyta.
  • Sustabdyta: Programėlė yra foniniame režime, tačiau jos vykdymas yra sustabdytas sistema taupant išteklius.

Perėjimai tarp būsenų ir su jais susiję įvykiai valdomi per sisteminį UIKit (arba SwiftUI) karkasą ir programėlės delegatą (UIApplicationDelegate arba @main Struct SwiftUI).

Pagrindiniai programėlės delegato metodai:

  • application:didFinishLaunchingWithOptions:: Programėlė paleista.
  • applicationDidBecomeActive:: Programėlė tapo aktyvi.
  • applicationWillResignActive:: Programėlė pereina iš aktyvios į neaktyvią būseną (pvz., įeinančio skambučio metu).
  • applicationDidEnterBackground:: Programėlė pereina į foninį režimą.
  • applicationWillEnterForeground:: Programėlė pereina iš fono į aktyvią.
  • applicationWillTerminate:: Programėlė uždaroma.

Pavyzdys naudojant App Delegate:

import UIKit

@main
class AppDelegate: UIResponder, UIApplicationDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Vyksta paleidus programėlę
        print("Programėlė paleista")
        return true
    }

    func applicationDidBecomeActive(_ application: UIApplication) {
        // Programėlė tapo aktyvi
        print("Programėlė aktyvi")
    }

    func applicationWillResignActive(_ application: UIApplication) {
        // Programėlė pereina iš aktyvios į neaktyvią
        print("Programėlė pereina į neaktyvią")
    }

    func applicationDidEnterBackground(_ application: UIApplication) {
        // Programėlė pereina į foninį režimą
        print("Programėlė pereina į foną")
    }

    func applicationWillEnterForeground(_ application: UIApplication) {
        // Programėlė pereina iš fono į priekinį
        print("Programėlė pereina į priekinį")
    }

    func applicationWillTerminate(_ application: UIApplication) {
        // Programėlė uždaroma
        print("Programėlė uždaroma")
    }
}

SwiftUI gyvenimo ciklas valdomas @main struktūra ir metodais onAppear, onDisappear, onChange. Taip pat, galima stebėti scenos būseną (ScenePhase):

import SwiftUI

@main
struct MyApp: App {
    @Environment(\.scenePhase) var scenePhase // Stebėti scenos būseną

    var body: some Scene {
        WindowGroup {
            ContentView()
        }
        .onChange(of: scenePhase) { newPhase in
            if newPhase == .active {
                // Scena tapo aktyvi
                print("Scena tapo aktyvi")
            } else if newPhase == .inactive {
                // Scena tapo neaktyvi
                print("Scena tapo neaktyvi")
            } else if newPhase == .background {
                // Scena perėjo į foninį režimą
                print("Scena perėjo į foninį režimą")
            }
        }
    }
}