Background Execution — μηχανισμός εκτέλεσης κώδικα εφαρμογής κινητού όταν αυτή δεν βρίσκεται στο προσκήνιο. Χωρίς αυτόν τον μηχανισμό, η εφαρμογή αναστέλλεται από το σύστημα κατά την ελαχιστοποίηση. Σύμφωνα με Apple, 2026, το iOS περιορίζει τον χρόνο παρασκηνίου στα 30 δευτερόλεπτα, ενώ το Android επιτρέπει πιο ευέλικτα σενάρια μέσω WorkManager και Foreground Service.
Κύρια
Background Execution — η ικανότητα της εφαρμογής να συνεχίσει την εκτέλεση κώδικα αφού ο χρήστης την ελαχιστοποίησε ή μεταπήδησε σε άλλη εφαρμογή. Χωρίς ειδικούς μηχανισμούς, το κινητό ΛΣ μεταφέρει την εφαρμογή σε κατάσταση Suspended (αναστολή) μέσα σε λίγα δευτερόλεπτα από την είσοδο στο παρασκήνιο, ελευθερώνοντας τον επεξεργαστή και τη μνήμη για ενεργές εφαρμογές.
Η εφαρμογή κινητού περνά από διάφορες καταστάσεις κύκλου ζωής: Foreground (ενεργή), Background (παρασκήνιο), Suspended (αναστολή) και Terminated (τερματισμός). Background — η μόνη κατάσταση στην οποία η εφαρμογή μπορεί να εκτελέσει κώδικα χωρίς ορατή διεπαφή. Το iOS και το Android ορίζουν διαφορετικά τη διάρκεια και τις επιτρεπόμενες λειτουργίες σε αυτήν την κατάσταση.
Η εκτέλεση στο παρασκήνιο είναι απαραίτητη για εργασίες συγχρονισμού δεδομένων, λήψης περιεχομένου, επεξεργασίας ειδοποιήσεων Push, γεωτοποθεσίας στο παρασκήνιο και αναπαραγωγής ήχου. Συγχρονισμός — το πιο συνηθισμένο σενάριο: η εφαρμογή στέλνει δεδομένα στον διακομιστή ή κατεβάζει ενημερώσεις χωρίς τη συμμετοχή του χρήστη.
Περιορισμοί της εκτέλεσης στο παρασκήνιο οφείλονται σε τρεις παράγοντες: κατανάλωση ενέργειας, απόδοση συσκευής και απόρρητο χρήστη. Ο επεξεργαστής και οι μονάδες ραδιοεπικοινωνίας (Wi-Fi, δεδομένα κινητής) καταναλώνουν την περισσότερη ενέργεια — κάθε διεργασία παρασκηνίου μειώνει τον χρόνο λειτουργίας της μπαταρίας.
Έρευνες της Google δείχνουν ότι εφαρμογές που εκτελούν εργασίες παρασκηνίου κάθε 5 λεπτά μειώνουν τον χρόνο λειτουργίας της συσκευής κατά 20–30% την ημέρα. Ακόμα και βελτιστοποιημένες λειτουργίες παρασκηνίου με συχνότητα μία φορά την ώρα έχουν αισθητό αντίκτυπο εάν υπάρχουν περισσότερες από δύο τέτοιες εφαρμογές.
Κάθε εφαρμογή παρασκηνίου καταλαμβάνει μνήμη RAM. Σε περίπτωση ανεπάρκειας μνήμης, το σύστημα εκφορτώνει εφαρμογές από τη μνήμη, οδηγώντας σε επανεκκίνηση κατά την επιστροφή του χρήστη. Το iOS χρησιμοποιεί τον αλγόριθμο Jetsam — μηχανισμό αναγκαστικού τερματισμού διεργασιών παρασκηνίου όταν ξεπεραστεί το όριο μνήμης. Το Android χρησιμοποιεί LMK (Low Memory Killer) με παρόμοια αρχή.
Από Android 10 και iOS 13, το σύστημα απαιτεί από τις εφαρμογές να δηλώνουν τον σκοπό της εργασίας παρασκηνίου. Το Android εισήγαγε περιορισμό στην εκκίνηση Broadcast Receiver στο παρασκήνιο. Το iOS απαιτεί τον καθορισμό Background Mode στα Capabilities του έργου. Ο χρήστης μπορεί να απενεργοποιήσει την εκτέλεση παρασκηνίου για οποιαδήποτε εφαρμογή στις ρυθμίσεις.
| ΛΣ | Έκδοση | Περιορισμός | Επίπτωση |
|---|---|---|---|
| Android | 8.0 | IMPLICIT_BROADCAST απαγορευμένο | 67% των Broadcast παρασκηνίου χαλασμένα |
| Android | 9.0 | Doze βελτιωμένο | Περιορισμός κλήσεων δικτύου |
| Android | 12+ | Foreground Service περιορισμένο | Απαγόρευση εκκίνησης από παρασκήνιο |
| iOS | 7+ | Background App Refresh | Περιοδικά παράθυρα ενημέρωσης |
| iOS | 13+ | BGTaskScheduler | Προγραμματισμός αντί εκτέλεσης |
Το Android παρέχει διάφορους μηχανισμούς για εκτέλεση στο παρασκήνιο, ο καθένας από τους οποίους λύνει τη δική του κατηγορία εργασιών. WorkManager — το συνιστώμενο API για αναβληθείσες και περιοδικές εργασίες. Foreground Service — για άμεση εκτέλεση με ορατή ειδοποίηση. JobScheduler — χαμηλού επιπέδου αντίστοιχο του WorkManager.
WorkManager — μέρος του Android Jetpack, εξασφαλίζει την εκτέλεση εργασιών παρασκηνίου με εγγύηση ολοκλήρωσης ακόμα και μετά από επανεκκίνηση της συσκευής. Το API επιλέγει τον βέλτιστο χρόνο εκτέλεσης λαμβάνοντας υπόψη την κατάσταση δικτύου, το επίπεδο μπαταρίας και τη λειτουργία Doze. Το WorkManager είναι συμβατό με API 14+ και αντικαθιστά τα παρωχημένα AlarmManager και JobScheduler.
Όταν η εφαρμογή χρειάζεται να εκτελέσει μια εργασία ορατή στον χρήστη (αναπαραγωγή μουσικής, καταγραφή γεωτοποθεσίας), χρησιμοποιείται Foreground Service. Η υπηρεσία εμφανίζει μια μόνιμη ειδοποίηση στη γραμμή κατάστασης και έχει υψηλότερη προτεραιότητα — το σύστημα δεν θα την τερματίσει μέχρι την ολοκλήρωση της εργασίας. Από Android 13, απαιτείται άδεια POST_NOTIFICATIONS.
Από Android 6.0, η συσκευή εισέρχεται σε λειτουργία Doze κατά την αδράνεια. Σε αυτήν τη λειτουργία, οι λειτουργίες δικτύου, ο συγχρονισμός και το JobScheduler αναβάλλονται. Το WorkManager προσαρμόζεται αυτόματα στο Doze — οι εργασίες εκτελούνται στο πλησιέστερο Maintenance Window όταν η συσκευή εξέρχεται από την κατάσταση ύπνου για συντήρηση.
Το iOS χρησιμοποιεί μια πιο αυστηρή προσέγγιση στην εκτέλεση παρασκηνίου. Background App Refresh — ο κύριος μηχανισμός περιοδικής ενημέρωσης δεδομένων. BGTaskScheduler — API για προγραμματισμό εργασιών λαμβάνοντας υπόψη την κατάσταση του συστήματος. Για μεγάλες λειτουργίες είναι διαθέσιμα Background Modes: audio, location, voip, fetch και processing.
Background App Refresh επιτρέπει στην εφαρμογή να αφυπνίζεται κάθε 15–30 λεπτά για συγχρονισμό δεδομένων. Ο χρόνος αφύπνισης εξαρτάται από τη συμπεριφορά του χρήστη — το σύστημα αναλύει πόσο συχνά ανοίγει την εφαρμογή. Ο χρήστης μπορεί να απενεργοποιήσει αυτήν τη λειτουργία για μεμονωμένες εφαρμογές στις Settings — General — Background App Refresh.
Από iOS 13, το BGTaskScheduler αντικατέστησε τα παρωχημένα performFetch και beginBackgroundTask. Η εφαρμογή καταχωρεί εργασίες με αναγνωριστικό και ελάχιστο διάστημα, και το σύστημα καθορίζει τον βέλτιστο χρόνο εκτέλεσης. Οι εργασίες χωρίζονται σε δύο τύπους: BGProcessingTask (μεγάλες, 10+ λεπτά) και BGAppRefreshTask (σύντομες, έως 30 δευτερόλεπτα).
Το iOS παρέχει περιορισμένο χρόνο στην εφαρμογή για την εκτέλεση εργασίας παρασκηνίου — έως 30 δευτερόλεπτα για BGAppRefreshTask και έως 10 λεπτά για BGProcessingTask. Μετά τη λήξη του ορίου, το σύστημα τερματίζει αναγκαστικά την εργασία. Ο προγραμματιστής πρέπει να καλέσει τον χειριστή λήξης (expiration handler) για αποθήκευση προσωρινών αποτελεσμάτων.
Ας εξετάσουμε την πρακτική υλοποίηση της εκτέλεσης παρασκηνίου στο Android με WorkManager. Παράδειγμα συγχρονισμού δεδομένων κάθε 8 ώρες λαμβάνοντας υπόψη την κατάσταση δικτύου. Το WorkManager εγγυάται την εκτέλεση της εργασίας ακόμα και μετά από επανεκκίνηση της συσκευής.
class SyncWorker(context: Context, params: WorkerParameters) : Worker(context, params) {
override fun doWork(): Result {
return try {
syncDataToServer()
Log.d("Sync", "Τα δεδομένα συγχρονίστηκαν")
Result.success()
} catch (e: Exception) {
Result.retry()
}
}
}
// Εκκίνηση περιοδικής εργασίας κάθε 8 ώρες
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.setRequiresCharging(false)
.build()
val syncRequest = PeriodicWorkRequestBuilder<SyncWorker>(
8, TimeUnit.HOURS
).setConstraints(constraints).build()
WorkManager.getInstance(context).enqueue(syncRequest)
Για μεγάλες λειτουργίες ορατές στον χρήστη, χρησιμοποιήστε Foreground Service. Παράδειγμα λήψης αρχείου με πρόοδο στην ειδοποίηση. Η υπηρεσία καλεί startForeground() με μια ειδοποίηση που δεν μπορεί να απορριφθεί. Με την ολοκλήρωση της λήψης — stopForeground(STOP_FOREGROUND_REMOVE).
class DownloadService : Service() {
override fun onStartCommand(intent: Intent?, flags: Int, id: Int): Int {
startForeground(NOTIFICATION_ID, createNotification())
downloadFile()
stopForeground(STOP_FOREGROUND_REMOVE)
stopSelf()
return START_NOT_STICKY
}
private fun createNotification(): Notification {
return NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle("Λήψη αρχείου")
.setSmallIcon(android.R.drawable.ic_download)
.build()
}
}
Στο iOS, η εκτέλεση παρασκηνίου διαμορφώνεται μέσω BGTaskScheduler. Παράδειγμα καταχώρησης και εκτέλεσης εργασίας ενημέρωσης περιεχομένου. Η εφαρμογή πρέπει να καταχωρήσει το αναγνωριστικό εργασίας στο Info.plist και να καλέσει submit τη στιγμή που η εργασία πρέπει να προγραμματιστεί.
import BackgroundTasks
func registerBackgroundTask() {
BGTaskScheduler.shared.register(
forTaskWithIdentifier: "com.app.refresh",
using: nil
) { task in
self.handleAppRefresh(task: task as! BGAppRefreshTask)
}
}
func scheduleAppRefresh() {
let request = BGAppRefreshTaskRequest(
identifier: "com.app.refresh"
)
request.earliestBeginDate = Date(timeIntervalSinceNow: 15 * 60)
try? BGTaskScheduler.shared.submit(request)
}
func handleAppRefresh(task: BGAppRefreshTask) {
scheduleAppRefresh()
task.expirationHandler = {
// Αποθήκευση προσωρινών δεδομένων
cacheCurrentState()
}
fetchLatestData {
task.setTaskCompleted(success: true)
}
}
Για μεγάλες λειτουργίες (εκκαθάριση προσωρινής μνήμης, επεξεργασία δεδομένων) χρησιμοποιήστε BGProcessingTask. Το σύστημα δίνει έως 10 λεπτά για εκτέλεση. Εκτελείται μόνο όταν η συσκευή είναι φορτιστή και συνδεδεμένη σε Wi-Fi. Απαιτεί ξεχωριστό αναγνωριστικό στο Info.plist και καταχώρηση μέσω register(forTaskWithIdentifier:).
func scheduleProcessing() {
let request = BGProcessingTaskRequest(
identifier: "com.app.cleanup"
)
request.requiresExternalPower = true
request.requiresNetworkConnectivity = true
request.earliestBeginDate = Date(timeIntervalSinceNow: 24 * 60 * 60)
try? BGTaskScheduler.shared.submit(request)
}
Το Android και το iOS διαφέρουν ριζικά στη φιλοσοφία εκτέλεσης παρασκηνίου. Android παρέχει ευέλικτα εργαλεία με μεγάλο έλεγχο, αλλά απαιτεί από τον προγραμματιστή τη σωστή επιλογή API. iOS περιορίζει τις δυνατότητες, αλλά εγγυάται σταθερή απόδοση και αυτονομία για τον χρήστη.
| Κριτήριο | Android | iOS |
|---|---|---|
| Συνιστώμενο API | WorkManager | BGTaskScheduler |
| Μέγ. χρόνος εργασίας | Απεριόριστος (Foreground Service) | 30 δευτ. / 10 λεπτά (processing) |
| Περιοδικές εργασίες | Ναι, μέσω PeriodicWorkRequest | Ναι, μέσω BGAppRefreshTask |
| Εγγύηση εκτέλεσης | Ναι, ακόμα και μετά από επανεκκίνηση | Όχι — το σύστημα αποφασίζει πότε |
| Πρόσβαση δικτύου στο παρασκήνιο | Περιορισμένη από τη λειτουργία Doze | Μέσω URLSession με background config |
| Γεωτοποθεσία στο παρασκήνιο | Foreground Service + άδεια | Background Mode location + NSLocation |
| Ήχος στο παρασκήνιο | Foreground Service με ειδοποίηση πολυμέσων | Background Mode audio + AVAudioSession |
Το WorkManager είναι βέλτιστο για εργασίες που πρέπει να εκτελούνται ανεξάρτητα από την κατάσταση της εφαρμογής: συγχρονισμός δεδομένων, αποστολή αναλυτικών στοιχείων, επεξεργασία ουρών. Το API εγγυάται την εκτέλεση ακόμα και μετά από απενεργοποίηση της συσκευής — η εργασία επαναπρογραμματίζεται μετά την εκκίνηση.
Το BGTaskScheduler είναι κατάλληλο για εργασίες που το σύστημα μπορεί να εκτελέσει οποιαδήποτε στιγμή: λήψη νέου περιεχομένου, ενημέρωση widget, εκκαθάριση προσωρινής μνήμης. Δεν είναι κατάλληλο για επείγουσες λειτουργίες — το σύστημα αναβάλλει την εργασία εάν η συσκευή είναι σε Doze ή η μπαταρία είναι χαμηλή.
Συχνές Ερωτήσεις
Background Execution — γενική έννοια που περιγράφει οποιονδήποτε κώδικα εκτελείται στο παρασκήνιο. Background Modes — συγκεκριμένος μηχανισμός iOS που επιτρέπει στην εφαρμογή να εκτελεί ορισμένους τύπους λειτουργιών παρασκηνίου: audio, geolocation, VoIP, fetch. Το Android χρησιμοποιεί παρόμοια προσέγγιση μέσω τύπων Foreground Service.
Στο iOS αυτό είναι το τυπικό όριο για BGAppRefreshTask. Το σύστημα τερματίζει αναγκαστικά την εργασία μετά τη λήξη του ορίου. Στο Android παρόμοια κατάσταση συμβαίνει όταν η εφαρμογή δεν χρησιμοποιεί WorkManager ή Foreground Service — η κανονική Υπηρεσία τερματίζεται από το σύστημα μετά την είσοδο στο παρασκήνιο.
Στο Android χρησιμοποιήστε WorkManager — εγγυάται την εκτέλεση ακόμα και μετά από επανεκκίνηση. Στο iOS η εκτέλεση δεν μπορεί να εγγυηθεί — το σύστημα αποφασίζει πότε θα εκτελέσει την εργασία. Ο μόνος τρόπος εγγύησης — χρήση Background Modes (audio, location) με ορατό δείκτη για τον χρήστη.
Στο iOS καλέστε το UIApplication.shared.backgroundRefreshStatus — κατάσταση .available, .denied ή .restricted. Στο Android χρησιμοποιήστε PowerManager.isIgnoringBatteryOptimizations() για έλεγχο εξαίρεσης από βελτιστοποίηση μπαταρίας. Για WorkManager δεν απαιτείται έλεγχος — το API χειρίζεται μόνο του τους περιορισμούς του συστήματος.
Οι ειδοποιήσεις Push — ο κύριος μηχανισμός για ενεργοποίηση ενεργειών χωρίς κώδικα παρασκηνίου. Στο iOS είναι διαθέσιμα PushKit για VoIP και Silent Push για ενημέρωση δεδομένων. Στο Android — High Priority FCM και Notification Trampoline. WebSockets μέσω Foreground Service — εναλλακτική για εφαρμογές πραγματικού χρόνου.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης