Background Execution ist ein Mechanismus, der es ermöglicht, Code einer mobilen App auszuführen, wenn sie sich nicht im Vordergrund befindet. Ohne diesen Mechanismus setzt das System die App beim Minimieren aus. Laut Apple, 2026 begrenzt iOS die Hintergrundzeit auf 30 Sekunden, während Android durch WorkManager und Foreground Service flexiblere Szenarien bietet.
Wichtige Punkte
Background Execution ist die Fähigkeit einer App, Code weiter auszuführen, nachdem der Benutzer sie minimiert oder zu einer anderen App gewechselt hat. Ohne spezielle Mechanismen versetzt das mobile Betriebssystem die App innerhalb weniger Sekunden nach dem Wechsel in den Hintergrund in den Zustand Suspended (ausgesetzt) und gibt CPU und Speicher für aktive Apps frei.
Eine mobile App durchläuft mehrere Lebenszyklus-Zustände: Foreground (aktiv), Background (im Hintergrund), Suspended (ausgesetzt) und Terminated (beendet). Background ist der einzige Zustand, in dem die App ohne sichtbare Oberfläche Code ausführen kann. iOS und Android definieren die Dauer und die verfügbaren Operationen in diesem Zustand unterschiedlich.
Hintergrundausführung wird für Datensynchronisation, Inhaltsdownload, Push-Benachrichtigungsverarbeitung, Hintergrund-Geolokalisierung und Audiowiedergabe benötigt. Synchronisation ist das häufigste Szenario: Die App sendet Daten an den Server oder lädt Updates ohne Benutzereingriff herunter.
Die Einschränkungen der Hintergrundausführung sind auf drei Faktoren zurückzuführen: Energieverbrauch, Geräteleistung und Benutzerdatenschutz. CPU und Funkmodule (Wi-Fi, Mobilfunkdaten) verbrauchen die meiste Energie — jeder Hintergrundprozess verkürzt die Akkulaufzeit.
Google-Studien zeigen, dass Apps, die alle 5 Minuten Hintergrundaufgaben ausführen, die Akkulaufzeit des Geräts um 20–30% pro Tag reduzieren. Selbst optimierte Hintergrundoperationen mit einer Häufigkeit von einmal pro Stunde haben eine spürbare Auswirkung, wenn mehr als zwei solcher Apps vorhanden sind.
Jede Hintergrund-App belegt RAM. Bei RAM-Knappheit entlädt das System Apps aus dem Speicher, was beim Zurückkehren des Benutzers zu einem Neustart führt. iOS verwendet den Jetsam-Algorithmus — einen Mechanismus zur erzwungenen Beendigung von Hintergrundprozessen bei Überschreitung des Speicherlimits. Android verwendet LMK (Low Memory Killer) mit einem ähnlichen Prinzip.
Ab Android 10 und iOS 13 verlangt das System von Apps, den Zweck der Hintergrundarbeit zu deklarieren. Android hat Beschränkungen für das Starten von Broadcast Receivern im Hintergrund eingeführt. iOS erfordert die Angabe des Background Mode in den Capabilities des Projekts. Der Benutzer kann die Hintergrundausführung für jede App in den Einstellungen deaktivieren.
| OS | Version | Einschränkung | Auswirkung |
|---|---|---|---|
| Android | 8.0 | IMPLICIT_BROADCAST verboten | 67% der Hintergrund-Broadcasts defekt |
| Android | 9.0 | Doze verbessert | Netzwerkaufrufe eingeschränkt |
| Android | 12+ | Foreground Service eingeschränkt | Start aus Hintergrund verboten |
| iOS | 7+ | Background App Refresh | Periodische Aktualisierungsfenster |
| iOS | 13+ | BGTaskScheduler | Planung statt Ausführung |
Android bietet mehrere Mechanismen für die Hintergrundausführung, die jeweils eine andere Kategorie von Aufgaben lösen. WorkManager ist die empfohlene API für verzögerte und periodische Aufgaben. Foreground Service dient der sofortigen Ausführung mit einer sichtbaren Benachrichtigung. JobScheduler ist eine Low-Level-Alternative zu WorkManager.
WorkManager ist Teil von Android Jetpack und bietet Hintergrundaufgabenausführung mit Garantie für den Abschluss auch nach einem Geräteneustart. Die API wählt den optimalen Ausführungszeitpunkt unter Berücksichtigung des Netzwerkstatus, des Akkuladestands und des Doze-Modus. WorkManager ist mit API 14+ kompatibel und ersetzt die veralteten AlarmManager und JobScheduler.
Wenn eine App eine für den Benutzer sichtbare Aufgabe ausführen muss (Musikwiedergabe, Geolokalisierungsaufzeichnung), wird Foreground Service verwendet. Der Dienst zeigt eine dauerhafte Benachrichtigung in der Statusleiste und hat eine höhere Priorität — das System beendet ihn erst, wenn die Aufgabe abgeschlossen ist. Ab Android 13 ist die Berechtigung POST_NOTIFICATIONS erforderlich.
Ab Android 6.0 wechselt das Gerät bei Inaktivität in den Doze-Modus. In diesem Modus werden Netzwerkoperationen, Synchronisation und JobScheduler zurückgestellt. WorkManager passt sich automatisch an Doze an — Aufgaben werden während des nächsten Wartungsfensters ausgeführt, wenn das Gerät zur Wartung aufwacht.
iOS verfolgt einen strengeren Ansatz für die Hintergrundausführung. Background App Refresh ist der primäre Mechanismus für periodische Datenaktualisierungen. BGTaskScheduler ist die API zur Planung von Aufgaben basierend auf dem Systemzustand. Für langlaufende Operationen stehen Background Modes zur Verfügung: audio, location, voip, fetch und processing.
Background App Refresh ermöglicht es der App, alle 15–30 Minuten aufzuwachen, um Daten zu synchronisieren. Die Aufwachzeit hängt vom Benutzerverhalten ab — das System analysiert, wie oft der Benutzer die App öffnet. Benutzer können diese Funktion für einzelne Apps in den Einstellungen — Allgemein — Background App Refresh deaktivieren.
Ab iOS 13 hat BGTaskScheduler die veralteten performFetch und beginBackgroundTask ersetzt. Die App registriert Aufgaben mit einer Kennung und einem Mindestintervall, und das System bestimmt den optimalen Ausführungszeitpunkt. Aufgaben werden in zwei Typen unterteilt: BGProcessingTask (lang, 10+ Minuten) und BGAppRefreshTask (kurz, bis zu 30 Sekunden).
iOS weist begrenzte Zeit für die Ausführung von Hintergrundaufgaben zu — bis zu 30 Sekunden für BGAppRefreshTask und bis zu 10 Minuten für BGProcessingTask. Bei Überschreitung des Limits beendet das System die Aufgabe zwangsweise. Der Entwickler muss den Expiration Handler aufrufen, um Zwischenergebnisse zu speichern.
Sehen wir uns eine praktische Implementierung der Hintergrundausführung auf Android mit WorkManager an. Ein Beispiel für die Datensynchronisation alle 8 Stunden mit Netzwerkzustandsbewusstsein. WorkManager garantiert die Aufgabenausführung auch nach einem Geräteneustart.
class SyncWorker(context: Context, params: WorkerParameters) : Worker(context, params) {
override fun doWork(): Result {
return try {
syncDataToServer()
Log.d("Sync", "Daten synchronisiert")
Result.success()
} catch (e: Exception) {
Result.retry()
}
}
}
// Periodische Aufgabe alle 8 Stunden ausführen
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)
Für langlaufende, für den Benutzer sichtbare Operationen verwenden Sie Foreground Service. Ein Beispiel für einen Dateidownload mit Fortschritt in der Benachrichtigung. Der Dienst ruft startForeground() mit einer Benachrichtigung auf, die nicht entfernt werden kann. Bei Download-Abschluss — 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("Datei herunterladen")
.setSmallIcon(android.R.drawable.ic_download)
.build()
}
}
Auf iOS wird die Hintergrundausführung über BGTaskScheduler konfiguriert. Ein Beispiel für die Registrierung und Ausführung einer Inhaltsaktualisierungsaufgabe. Die App muss die Aufgabenkennung in Info.plist registrieren und submit aufrufen, wenn die Aufgabe geplant werden soll.
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 = {
// Zwischendaten speichern
cacheCurrentState()
}
fetchLatestData {
task.setTaskCompleted(success: true)
}
}
Für langlaufende Operationen (Cache-Bereinigung, Datenverarbeitung) verwenden Sie BGProcessingTask. Das System gewährt bis zu 10 Minuten für die Ausführung. Wird nur ausgeführt, wenn das Gerät lädt und mit Wi-Fi verbunden ist. Erfordert eine separate Kennung in Info.plist und Registrierung über 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 und iOS unterscheiden sich grundlegend in ihrer Philosophie der Hintergrundausführung. Android bietet flexible Werkzeuge mit mehr Kontrolle, erfordert aber vom Entwickler die Wahl der richtigen API. iOS schränkt die Möglichkeiten ein, garantiert aber stabile Leistung und Akkulaufzeit für den Benutzer.
| Kriterium | Android | iOS |
|---|---|---|
| Empfohlene API | WorkManager | BGTaskScheduler |
| Maximale Aufgabendauer | Unbegrenzt (Foreground Service) | 30 s / 10 min (processing) |
| Periodische Aufgaben | Ja, über PeriodicWorkRequest | Ja, über BGAppRefreshTask |
| Ausführungsgarantie | Ja, auch nach Neustart | Nein — System entscheidet, wann |
| Netzwerkzugriff im Hintergrund | Durch Doze-Modus eingeschränkt | Über URLSession mit background config |
| Geolokalisierung im Hintergrund | Foreground Service + Berechtigung | Background Mode location + NSLocation |
| Audio im Hintergrund | Foreground Service mit Medienbenachrichtigung | Background Mode audio + AVAudioSession |
WorkManager ist optimal für Aufgaben, die unabhängig vom App-Zustand abgeschlossen werden müssen: Datensynchronisation, Analytics-Versand, Warteschlangenverarbeitung. Die API garantiert die Ausführung auch nach dem Ausschalten des Geräts — die Aufgabe wird nach dem Start neu geplant.
BGTaskScheduler eignet sich für Aufgaben, die das System zu einem beliebigen günstigen Zeitpunkt ausführen kann: Herunterladen neuer Inhalte, Aktualisieren von Widgets, Leeren des Caches. Nicht geeignet für dringende Operationen — das System verzögert die Aufgabe, wenn das Gerät im Doze-Modus ist oder der Akku schwach ist.
Häufig gestellte Fragen
Background Execution ist ein allgemeiner Begriff, der jeglichen im Hintergrund ausgeführten Code beschreibt. Background Modes ist ein spezifischer iOS-Mechanismus, der es einer App ermöglicht, bestimmte Arten von Hintergrundoperationen durchzuführen: Audio, Geolokalisierung, VoIP, fetch. Android verwendet einen ähnlichen Ansatz über Foreground Service-Typen.
Auf iOS ist dies die Standardbegrenzung für BGAppRefreshTask. Das System beendet die Aufgabe zwangsweise bei Erreichen des Limits. Auf Android tritt eine ähnliche Situation auf, wenn die App WorkManager oder Foreground Service nicht verwendet — ein normaler Service wird vom System nach dem Wechsel in den Hintergrund beendet.
Auf Android verwenden Sie WorkManager — er garantiert die Ausführung auch nach einem Neustart. Auf iOS kann die Ausführung nicht garantiert werden — das System entscheidet, wann die Aufgabe ausgeführt wird. Die einzige Möglichkeit, die Ausführung zu garantieren, ist die Verwendung von Background Modes (audio, location) mit einem sichtbaren Indikator für den Benutzer.
Auf iOS rufen Sie UIApplication.shared.backgroundRefreshStatus auf — Status .available, .denied oder .restricted. Auf Android verwenden Sie PowerManager.isIgnoringBatteryOptimizations(), um die Befreiung von der Akkuoptimierung zu überprüfen. Für WorkManager ist keine Überprüfung erforderlich — die API behandelt die Systemeinschränkungen selbst.
Push-Benachrichtigungen sind der primäre Mechanismus zum Auslösen von Aktionen ohne Hintergrundcode. Auf iOS stehen PushKit für VoIP und Silent Push für Datenaktualisierungen zur Verfügung. Auf Android — High Priority FCM und Notification Trampoline. WebSockets über Foreground Service sind eine Alternative für Echtzeit-Apps.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch