Sobes.tech
Junior

Можеш ли да говориш о животном циклусу апликације на iOS?

sobes.tech АИ

Одговор од АИ

Апликацијата преминава низ следните состојби:

  • Не работи: Апликацијата не е стартувана.
  • Неактивна: Апликацијата е стартувана, но не добива настани (на пример, за време на влезен повик или премин во позадина).
  • Активна: Апликацијата е активна и целосно функционална. Добива сите настани.
  • Позадина: Апликацијата е во режим на позадина. Може да извршува ограничен код или да биде паузирана.
  • Задржана: Апликацијата е во режим на позадина, но нејзиното извршување е прекинато од системот за заштеда на ресурси.

Премините меѓу состојбите и поврзаните со нив настани се управуваат од системскиот рамковен систем 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("Сцената премина во позадина")
            }
        }
    }
}