Чӣ гуна таъмин кардан мумкин аст, ки барнома дар пасзамана фаъолият кунад?
sobes.tech AI
Ҷавоб аз AI
Барои таъмини кори барнома дар режими пасзамана, механизмҳои гуногуни iOS истифода мешаванд, вобаста ба навъи вазифа:
-
Режимҳои пасзамана (Background Modes): Инҳо режимҳои пешфарзии системаи мебошанд, ки имкон медиҳанд, ки баъзе амалҳоро дар режими пасзамана иҷро кунанд. Баъзеи маъмул:
audio: Навозиш ё сабт кардани аудио.location: пайгирии макон.voip: кор бо VoIP.fetch: боргирии мунтазами мундариҷаи нав.processing: иҷрои вазифаҳои сарборӣ.remote-notification: коркарди огоҳиномаҳои push.
Барои фаъол кардани режимҳои пасзамана бояд калидҳои мувофиқро ба
Info.plistилова кунед ё Capabilities-ро дар Xcode истифода баред. -
Вазифа дар пасзамана (Background Task): Имкон медиҳад, ки мӯҳлати маҳдуд барои анҷоми вазифаи ҳозира пас аз гузаштан ба режими пасзамана гирифта шавад.
var backgroundTask: UIBackgroundTaskIdentifier = .invalid func registerBackgroundTask() { backgroundTask = UIApplication.shared.beginBackgroundTask { // Ҳалли тамом шудани вақт self.endBackgroundTask() } // Иҷрои вазифаи пасзамана // ... } func endBackgroundTask() { UIApplication.shared.endBackgroundTask(backgroundTask) backgroundTask = .invalid } -
Fetch дар пасзамана (Background Fetch): Имкон медиҳад, ки система ба таври мунтазам барнома дар режими пасзамана оғоз кунад барои санҷиш ва боргирии мундариҷаи нав.
// Дар AppDelegate, дар didFinishLaunchingWithOptions UIApplication.shared.setMinimumBackgroundFetchInterval(UIApplication.backgroundFetchIntervalMinimum) // Дар didFinishLaunchingWithOptions ё дар як методи алоҳида func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { // Иҷрои боргирии асинхронӣ // Пас аз анҷом, моҳиятан ба completionHandler натиҷаи мувофиқро медиҳем: // .newData, .noData, .failed completionHandler(.newData) } -
Коркарди дар пасзамана (Background Processing): Барои иҷрои вазифаҳои сарборӣ, ки метавонанд муддати тӯлонӣ гиранд, пешбинӣ шудааст. Бо
BGTaskSchedulerистифода мешавад.import BackgroundTasks let taskID = "com.yourapp.mytask" func registerBackgroundTasks() { BGTaskScheduler.shared.register(forTaskWithIdentifier: taskID) { task in // Иҷрои вазифа self.handleBackgroundTask(task: task as! BGProcessingTask) } } func handleBackgroundTask(task: BGProcessingTask) { // Иҷрои вазифаи дарозмуддат // Нишон додани вазифа ҳамчун анҷомёфта task.setTaskCompleted(success: true) } // Тарҳрезии вазифа func scheduleBackgroundProcessingTask() { let request = BGProcessingTaskRequest(identifier: taskID) // Танзим кардани талаботҳо ба муҳити иҷро (масалан, дастрасии шабака, пуркунӣ батарея) request.requiresNetworkConnectivity = true do { try BGTaskScheduler.shared.submit(request) } catch { print("Намудани имконияти тарҳрезии вазифа: \(error)") } }