BGTaskScheduler: τι είναι, εργασίες παρασκηνίου iOS

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-03-27 Χρόνος ανάγνωσης: 8 λεπ

BGTaskScheduler — είναι το πλαίσιο της Apple για τον προγραμματισμό και την εκτέλεση εργασιών παρασκηνίου σε εφαρμογές iOS 13 και νεότερες. Αντικατέστησε τα παλιά Background Fetch και performFetch, παρέχοντας ένα ενιαίο API για εργασία με λειτουργίες παρασκηνίου. Σύμφωνα με το Apple Developer Documentation, 2026, το πλαίσιο περιλαμβάνει δύο τύπους εργασιών: BGProcessingTask για μεγάλες λειτουργίες και BGAppRefreshTask για σύντομες ενημερώσεις περιεχομένου.

Κύρια σημεία

  • BGTaskScheduler — είναι το πλαίσιο iOS 13+ για τη διαχείριση εργασιών παρασκηνίου που αντικατέστησε το παλιό Background Fetch.
  • BGAppRefreshTask — σύντομη εργασία παρασκηνίου έως 30 δευτερόλεπτα για ενημέρωση περιεχομένου.
  • BGProcessingTask — μεγάλη εργασία παρασκηνίου έως αρκετά λεπτά για λειτουργίες έντασης πόρων.
  • Εγγραφή των εργασιών γίνεται στο Info.plist μέσω αναγνωριστικών και στον κώδικα μέσω handleTasks.
  • Το σύστημα καθορίζει αυτόματα τον βέλτιστο χρόνο εκτέλεσης των εργασιών βάσει της συμπεριφοράς του χρήστη.

Τι είναι το BGTaskScheduler;

BGTaskScheduler — είναι το πλαίσιο συστήματος της Apple, που εισήχθη στο iOS 13, το οποίο διαχειρίζεται κεντρικά την εκτέλεση εργασιών παρασκηνίου. Πριν από την εμφάνισή του, οι προγραμματιστές χρησιμοποιούσαν τα UIApplication backgroundTasks, performFetch και τον χειρισμό συμβάντων στο appDelegate, οδηγώντας σε κατακερματισμό κώδικα και απρόβλεπτη συμπεριφορά.

Το πλαίσιο λειτουργεί με βάση την αρχή του καθυστερημένου προγραμματισμού: η εφαρμογή καταχωρεί εργασίες με μοναδικά αναγνωριστικά και το iOS καθορίζει μόνο του τη βέλτιστη στιγμή για την εκτέλεσή τους. Το σύστημα λαμβάνει υπόψη το επίπεδο μπαταρίας, τη δραστηριότητα του χρήστη, την κατάσταση δικτύου και άλλους παράγοντες.

Βασικές δυνατότητες περιλαμβάνουν εργασία τόσο με σύντομες όσο και με μεγάλες λειτουργίες παρασκηνίου. Σε αντίθεση με το AlarmManager στο Android, το BGTaskScheduler δεν εγγυάται ακριβή χρόνο εκτέλεσης — το σύστημα διατηρεί το δικαίωμα να καθυστερήσει την εργασία εάν οι συνθήκες είναι δυσμενείς.

Πώς λειτουργεί το BGTaskScheduler στο iOS;

BGTaskScheduler χρησιμοποιεί αρχιτεκτονική βασισμένη σε χειριστές (handlers). Η εφαρμογή καταχωρεί έναν χειριστή για κάθε τύπο εργασίας και το σύστημα τον καλεί όταν έρθει η κατάλληλη στιγμή. Το ίδιο το πλαίσιο δεν εκτελεί την εργασία άμεσα — ειδοποιεί απλώς την εφαρμογή ότι είναι ώρα να την ξεκινήσει.

Διαδικασία εγγραφής εργασίας

Η εγγραφή ξεκινά με τη δήλωση του αναγνωριστικού εργασίας στο Info.plist μέσω του πίνακα BGTaskSchedulerPermittedIdentifiers. Στη συνέχεια, στον κώδικα της εφαρμογής, καλείται η μέθοδος registerHandler(forTaskWithIdentifier:) με ένα closure-χειριστή.

swift
import BackgroundTasks

let taskID = "com.example.app.refresh"

BGTaskScheduler.shared.registerHandler(
    forTaskWithIdentifier: taskID,
    using: DispatchQueue.global()
) { task in
    task.expirationHandler = {
        // καλείται κατά την αναγκαστική λήξη
    }
    processBackgroundTask(task as! BGAppRefreshTask)
}

Προγραμματισμός εκτέλεσης

Μετά την εγγραφή, η εφαρμογή πρέπει να ζητήσει ρητά την εκτέλεση της εργασίας μέσω του submitTaskRequest. Το αίτημα περιέχει το αναγνωριστικό εργασίας και την ημερομηνία της νωρίτερης δυνατής έναρξης. Το σύστημα αποθηκεύει το αίτημα και το επεξεργάζεται όταν κρίνει ότι οι συνθήκες είναι κατάλληλες.

swift
let request = BGAppRefreshTaskRequest(
    identifier: taskID
)
request.earliestBeginDate = Date(timeIntervalSinceNow: 3600)

do {
    try BGTaskScheduler.shared.submit(request)
} catch {
    print("Σφάλμα προγραμματισμού: \(error)")
}

Τύποι εργασιών παρασκηνίου BGTaskScheduler

BGTaskScheduler παρέχει δύο κύριους τύπους εργασιών, καθένας από τους οποίους είναι σχεδιασμένος για το δικό του σενάριο χρήσης. Η επιλογή του σωστού τύπου επηρεάζει άμεσα την πιθανότητα επιτυχούς εκτέλεσης της εργασίας από το σύστημα.

BGAppRefreshTask

BGAppRefreshTask έχει σχεδιαστεί για σύντομες ενημερώσεις περιεχομένου παρασκηνίου: φόρτωση νέων δεδομένων, συγχρονισμός με τον διακομιστή, ενημέρωση widget. Ο χρόνος εκτέλεσης περιορίζεται στα 30 δευτερόλεπτα, μετά τα οποία το σύστημα τερματίζει αναγκαστικά την εργασία. Αυτός ο τύπος εργασιών εκτελείται συχνότερα από το BGProcessingTask και έχει υψηλότερη προτεραιότητα.

BGProcessingTask

BGProcessingTask έχει σχεδιαστεί για μεγαλύτερες λειτουργίες: επεξεργασία αρχείων πολυμέσων, ευρετηρίαση δεδομένων Core Data, δημιουργία αντιγράφων ασφαλείας. Η εργασία μπορεί να διαρκέσει έως αρκετά λεπτά, αλλά το σύστημα την εκτελεί λιγότερο συχνά και μόνο υπό ευνοϊκές συνθήκες — σύνδεση σε τροφοδοσία, σταθερό Wi-Fi και χαμηλό φορτίο συσκευής.

ΠαράμετροςBGAppRefreshTaskBGProcessingTask
Χρονικό όριο30 δευτερόλεπτααρκετά λεπτά
Συχνότητα εκτέλεσηςυψηλήχαμηλή
Συνθήκεςοποιεσδήποτετροφοδοσία + Wi-Fi
Απαιτεί τροφοδοσίαόχισυνιστάται
Παράδειγμαενημέρωση ροήςεπεξεργασία βίντεο

Εγγραφή και προγραμματισμός εργασιών

Σωστή εγγραφή — είναι υποχρεωτική προϋπόθεση για τη λειτουργία του BGTaskScheduler. Εάν η εργασία δεν είναι καταχωρημένη στο Info.plist, το σύστημα θα αγνοήσει οποιοδήποτε αίτημα εκτέλεσής της.

Εγγραφή στο Info.plist

Στο αρχείο Info.plist προστίθεται ένας πίνακας BGTaskSchedulerPermittedIdentifiers με μια λίστα αναγνωριστικών κειμένου. Κάθε αναγνωριστικό πρέπει να είναι μοναδικό εντός της εφαρμογής. Η Apple συνιστά τη χρήση αντίστροφης σημειογραφίας τομέα.

xml
<key>BGTaskSchedulerPermittedIdentifiers</key>
<array>
    <string>com.example.app.refresh</string>
    <string>com.example.app.processing</string>
</array>

Προγραμματισμός και ακύρωση

Για τον προγραμματισμό χρησιμοποιείται η μέθοδος submitTaskRequest. Εάν η εργασία δεν είναι πλέον απαραίτητη, μπορεί να ακυρωθεί μέσω cancelTaskRequest ή cancelAllTaskRequests. Το σύστημα ακυρώνει αυτόματα τις εργασίες κατά τη διαγραφή της εφαρμογής ή την επαναφορά δεδομένων.

Παρακολούθηση κατάστασης εργασιών

Το BGTaskScheduler παρέχει τη δυνατότητα παρακολούθησης της κατάστασης των προγραμματισμένων εργασιών μέσω του getPendingTaskRequests. Αυτή η μέθοδος επιστρέφει μια λίστα όλων των ενεργών αιτημάτων με πληροφορίες σχετικά με τον τύπο, το αναγνωριστικό και το earliestBeginDate. Για κάθε αίτημα, μπορείτε να ελέγξετε εάν έχει ήδη εκτελεστεί ή ακυρωθεί και να λάβετε απόφαση σχετικά με τον επαναπρογραμματισμό.

Είναι σημαντικό να σημειωθεί ότι το σύστημα δεν παρέχει άμεση ανάκληση (Callback) σχετικά με την επιτυχία εκτέλεσης της εργασίας παρασκηνίου — ο χειριστής πρέπει ο ίδιος να αναφέρει το αποτέλεσμα μέσω των ιδιοτήτων της εργασίας. Η setTaskCompleted επιτρέπει τη σήμανση της εργασίας ως επιτυχώς ολοκληρωμένης, μετά την οποία το σύστημα μπορεί να ξεκινήσει την επόμενη προγραμματισμένη εργασία αυτού του τύπου. Εάν η εργασία δεν καλέσει την setTaskCompleted, το σύστημα τη θεωρεί ολοκληρωμένη μετά τη λήξη του χρόνου ή κατά την αναγκαστική λήξη.

Για τη διάγνωση προβλημάτων συνιστάται η χρήση του OSLog στον χειριστή και η προβολή καταγραφών μέσω του Console.app σε Mac. Η Apple παρέχει επίσης το εργαλείο MetricKit για ανάλυση απόδοσης εργασιών παρασκηνίου — συλλέγει δεδομένα σχετικά με τον χρόνο εκτέλεσης, την κατανάλωση ενέργειας και τη συχνότητα εκτέλεσης, τα οποία μπορούν να χρησιμοποιηθούν για βελτιστοποίηση.

swift
// Ακύρωση συγκεκριμένης εργασίας
BGTaskScheduler.shared.cancel(taskRequestWithIdentifier: taskID)

// Ακύρωση όλων των εργασιών
BGTaskScheduler.shared.cancelAllTaskRequests()

// Έλεγχος προγραμματισμένων εργασιών
BGTaskScheduler.shared.getPendingTaskRequests { requests in
    print("\(requests.count) εργασίες προγραμματίστηκαν")
}

Περιορισμοί και συστάσεις

BGTaskScheduler επιβάλλει αυστηρούς περιορισμούς στην εργασία παρασκηνίου. Το σύστημα μπορεί να καθυστερήσει την εργασία για αόριστο χρονικό διάστημα εάν οι συνθήκες είναι δυσμενείς. Ο προγραμματιστής πρέπει να κατανοεί ότι το πλαίσιο δεν είναι σχεδιασμένο για εργασίες πραγματικού χρόνου.

Μεταξύ των βασικών περιορισμών: το σύστημα δεν εγγυάται την εκτέλεση της εργασίας στον καθορισμένο χρόνο, ο μέγιστος αριθμός ταυτόχρονων εργασιών είναι περιορισμένος και η κατανάλωση ενέργειας ελέγχεται αυστηρά. Η εκτέλεση πολλών εργασιών διαδοχικά μπορεί να οδηγήσει σε συγχώνευση ή ακύρωσή τους.

Για την αύξηση της πιθανότητας εκτέλεσης, συνιστάται η ρύθμιση του earliestBeginDate όχι νωρίτερα από 1 ώρα για το BGProcessingTask και 15 λεπτά για το BGAppRefreshTask. Είναι επίσης σημαντικό να χειρίζεστε το expirationHandler — εάν η εργασία δεν χωράει στο όριο, το σύστημα καλεί αυτόν τον χειριστή για σωστό τερματισμό. Ο επαναπρογραμματισμός πρέπει να γίνεται εντός του ίδιου του χειριστή για να διατηρείται ένας συνεχής κύκλος εργασίας παρασκηνίου.

Ένας ακόμη σημαντικός περιορισμός αφορά τα αιτήματα δικτύου. Το BGTaskScheduler δεν εγγυάται την ύπαρξη ενεργής σύνδεσης δικτύου κατά την εκτέλεση της εργασίας. Η εφαρμογή πρέπει να ελέγχει η ίδια τη διαθεσιμότητα δικτύου μέσω του NWPathMonitor και να καθυστερεί την επεξεργασία εάν η σύνδεση απουσιάζει. Αυτό διαφέρει από το Android JobScheduler, το οποίο μπορεί να ενεργοποιήσει την εργασία μόνο όταν είναι συνδεδεμένο σε δίκτυο συγκεκριμένου τύπου. Στην πράξη, οι προγραμματιστές συχνά συνδυάζουν το BGTaskScheduler με συνεδρίες URL παρασκηνίου NSURLSession για αξιόπιστη φόρτωση δεδομένων.

Συμβατότητα με macOS και watchOS

Από το macOS Catalina, το BGTaskScheduler είναι επίσης διαθέσιμο σε Mac. Αυτό επιτρέπει τη δημιουργία διαπλατφορμικών εργασιών παρασκηνίου για εφαρμογές UIKit που εκτελούνται σε Apple Silicon. Στο watchOS, το πλαίσιο λειτουργεί περιορισμένα — διατίθενται μόνο σύντομες BGAppRefreshTask για ενημέρωση complication και συγχρονισμό δεδομένων με το iPhone. Οι προγραμματιστές πρέπει να λαμβάνουν υπόψη τις διαφορές πλατφόρμας κατά τον σχεδιασμό της αρχιτεκτονικής παρασκηνίου.

Εργαλεία εντοπισμού σφαλμάτων και διάγνωσης

Για τον εντοπισμό σφαλμάτων στο BGTaskScheduler, η Apple παρέχει πολλά εργαλεία. Η εντολή e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.example.task"] στο lldb εξαναγκάζει την εκτέλεση της εργασίας παρασκηνίου, αγνοώντας τους περιορισμούς του συστήματος. Στο Xcode είναι διαθέσιμη η σημαία Simulate Background Fetch στο μενού Debug, η οποία προσομοιώνει μια σύντομη ενημέρωση παρασκηνίου. Για ανάλυση απόδοσης χρησιμοποιείται το MetricKit — συλλέγει πληροφορίες σχετικά με τη συχνότητα εκτέλεσης, τη διάρκεια και την κατανάλωση ενέργειας κάθε εργασίας. Αυτά τα δεδομένα βοηθούν στη βελτιστοποίηση της συχνότητας προγραμματισμού και στην επιλογή του σωστού τύπου εργασίας.

Στην πράξη, το BGTaskScheduler είναι κατάλληλο για ενημέρωση δεδομένων widget, συγχρονισμό iCloud, επεξεργασία push ειδοποιήσεων με περιεχόμενο και ευρετηρίαση αναζήτησης Spotlight. Δεν είναι κατάλληλο για αποστολή αναλυτικών στοιχείων σε πραγματικό χρόνο, εφαρμογές συνομιλίας ή οποιεσδήποτε εργασίες απαιτούν άμεση εκτέλεση.

Πόροι και τεκμηρίωση της Apple

Για εμπεριστατωμένη μελέτη του BGTaskScheduler, η Apple συνιστά την επίσημη τεκμηρίωση WWDC: η συνεδρία “Advances in Background Tasks” (2020) καλύπτει τη μετεγκατάσταση από παλιά API, και η “Background Tasks in Practice” (2021) περιέχει πραγματικές περιπτώσεις χρήσης. Επίσης χρήσιμος είναι ο οδηγός Energy Efficiency Guide, όπου περιγράφεται πώς το πλαίσιο εντάσσεται στη συνολική στρατηγική εξοικονόμησης ενέργειας της Apple. Παραδείγματα κώδικα είναι διαθέσιμα στο επίσημο αποθετήριο Apple Developer στο GitHub με πλήρη έργα για iOS και macOS.

Συχνές Ερωτήσεις

Σε τι διαφέρει το BGTaskScheduler από το Background Fetch στο iOS 12;

Background Fetch περιοριζόταν σε μία εργασία παρασκηνίου ανά εφαρμογή και δεν είχε μηχανισμό προτεραιοτήτων. Το BGTaskScheduler υποστηρίζει πολλές εργασίες διαφορετικών τύπων, παρέχει ενιαίο API και αυτόματη διαχείριση ενέργειας.

Πόσες εργασίες παρασκηνίου μπορούν να καταχωρηθούν στο BGTaskScheduler;

Η Apple δεν θέτει ρητό όριο στον αριθμό των καταχωρημένων αναγνωριστικών, αλλά στην πράξη συνιστάται η χρήση όχι περισσότερων από 5–10 εργασιών. Ο μεγαλύτερος αριθμός μειώνει την πιθανότητα εκτέλεσης κάθε συγκεκριμένης εργασίας λόγω ανταγωνισμού για πόρους συστήματος.

Πώς γίνεται ο εντοπισμός σφαλμάτων εκτέλεσης του BGTaskScheduler σε πραγματική συσκευή;

Για εντοπισμό σφαλμάτων, χρησιμοποιήστε την εντολή e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.example.task"] στο lldb. Εξαναγκάζει την εκτέλεση της εργασίας, παρακάμπτοντας τους περιορισμούς του συστήματος. Επίσης, η σημαία Xcode Simulate Background Fetch είναι διαθέσιμη στο μενού Debug.

Μπορεί το BGTaskScheduler να εκτελέσει εργασία εάν η εφαρμογή είναι κλειστή;

Ναι, το BGTaskScheduler μπορεί να ξεκινήσει τη διαδικασία ακόμα και αν η εφαρμογή έχει κλείσει αναγκαστικά από τον χρήστη. Ωστόσο, το σύστημα μπορεί να εφαρμόσει πρόσθετες καθυστερήσεις και δεν εγγυώνται όλοι οι τύποι εργασιών την εκτέλεση σε αυτό το σενάριο.

Τι συμβαίνει εάν η εργασία δεν ολοκληρωθεί εντός του προβλεπόμενου χρόνου;

Το σύστημα θα καλέσει το expirationHandler, στέλνοντας σήμα στην εργασία για την ανάγκη τερματισμού. Εάν η εφαρμογή αγνοήσει αυτό το σήμα και συνεχίσει να λειτουργεί, το iOS θα τερματίσει αναγκαστικά τη διαδικασία. Στη συνέχεια, το σύστημα μπορεί να μειώσει την προτεραιότητα όλων των εργασιών παρασκηνίου της εφαρμογής.

Σύνοψη

  • BGTaskScheduler — είναι το ενοποιημένο πλαίσιο της Apple για τη διαχείριση όλων των εργασιών παρασκηνίου σε iOS 13+ και macOS Catalina+.
  • Δύο τύποι εργασιών — BGAppRefreshTask έως 30 δευτερόλεπτα και BGProcessingTask έως αρκετά λεπτά — καλύπτουν διαφορετικά σενάρια εργασίας παρασκηνίου.
  • Εγγραφή υποχρεωτική σε δύο σημεία: Info.plist (αναγνωριστικά) και κώδικας (registerHandler).
  • Προγραμματισμός μέσω submitTaskRequest με earliestBeginDate — το σύστημα επιλέγει μόνο του τη βέλτιστη στιγμή έναρξης.
  • ExpirationHandler υποχρεωτικό για τον χειρισμό αναγκαστικού τερματισμού της εργασίας από το σύστημα.
  • Περιορισμοί περιλαμβάνουν έλλειψη εγγύησης εκτέλεσης, έλεγχο κατανάλωσης ενέργειας και εξάρτηση από την κατάσταση της συσκευής.
  • Χρησιμοποιήστε το BGTaskScheduler για ενημέρωση περιεχομένου, συγχρονισμό και ευρετηρίαση, αλλά όχι για εργασίες πραγματικού χρόνου.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης