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("სცენა გადავიდა ფონის რეჟიმში")
            }
        }
    }
}