Daten laden, Inhalte synchronisieren, Analysen senden — viele Aufgaben erfordern keine aktive Beteiligung des Benutzers. Mobile Geräte schränken jedoch Hintergrundarbeit ein, um Akku zu sparen und die Leistung zu erhalten. Hintergrundaufgaben (background tasks) sind Mechanismen, die es einer App ermöglichen, Code auszuführen, wenn der Benutzer sie nicht sieht. In diesem Artikel behandeln wir WorkManager, BGTaskScheduler, Foreground Service und die Besonderheiten des Doze Mode. Weitere Informationen finden Sie in der offiziellen WorkManager-Dokumentation.
Wichtige Punkte
Eine Hintergrundaufgabe ist jeder Code, der ausgeführt wird, wenn die App nicht im Vordergrund (aktiver Bildschirm) ist. Dies kann umfassen: periodische Datensynchronisation mit dem Server, Herunterladen großer Dateien, Verarbeitung von Push-Benachrichtigungen, Geolokalisierungs-Tracking, Widget-Updates. Jede Plattform hat ihre eigenen Einschränkungen für Hintergrundarbeit: iOS ist strenger (10–30 Minuten Hintergrundzeit), Android ist großzügiger, hat aber seit Version 9 die Regeln verschärft.
Die Architektur von Hintergrundaufgaben basiert auf drei Ebenen: (1) sofortige Aufgaben — werden sofort ausgeführt (Foreground Service); (2) zurückgestellte Aufgaben — werden unter geeigneten Bedingungen ausgeführt (WorkManager, BGTaskScheduler); (3) periodische Aufgaben — wiederholen sich in einem festgelegten Intervall. Die Wahl der richtigen Ebene bestimmt, ob die Aufgabe rechtzeitig erledigt wird und ob sie zur Ablehnung der App im Store führt.
Auf beiden Plattformen empfehlen Google/Apple nachdrücklich die Verwendung deklarativer APIs anstelle der direkten Verwaltung von Threads im Hintergrund. WorkManager auf Android und BGTaskScheduler auf iOS ermöglichen es dem System, Hintergrundarbeit optimal zwischen Apps zu verteilen und Aufgaben zur Energieeinsparung zu gruppieren. Bei IT Sectr beginnen wir das Design der Hintergrundarchitektur immer mit der Analyse der Anforderungen an Aktualisierungshäufigkeit und Dringlichkeit.
iOS bietet mehrere Mechanismen für Hintergrundarbeit. Background Fetch — periodische Inhaltsaktualisierung mit einem vom System (nicht vom Entwickler) bestimmten Intervall. Die App erhält ein ~30-Sekunden-Fenster zum Herunterladen neuer Daten. Background Fetch wird über Capabilities → Background Modes → Background Fetch aktiviert und im AppDelegate implementiert: application(_:performFetchWithCompletionHandler:).
BGTaskScheduler ist die moderne API für iOS 13+, die Background Fetch ersetzt. Der Entwickler registriert eine Aufgabe mit einer Kennung, und das System führt sie unter geeigneten Bedingungen aus. BGAppRefreshTask — für kurze Inhaltsaktualisierungen; BGProcessingTask — für langlaufende Aufgaben (Cache-Bereinigung, Datenbanksynchronisation). Aufgaben werden beim App-Start registriert, und das System plant ihre Ausführung unter Berücksichtigung von Akkuzustand, Netzwerk und Benutzeraktivität.
Background Modes — eine Liste von Modi, die Hintergrundarbeit für bestimmte Szenarien erlauben: Audio (Hintergrundwiedergabe), Location (GPS-Tracking), VoIP (Anrufe über PushKit), BLE (Bluetooth-Geräteverbindung), Processing (langlaufende Aufgaben über BGTaskScheduler). Jeder Modus erfordert eine Begründung bei der App Store-Überprüfung. Die Verwendung von Modi ohne tatsächlichen Bedarf ist ein häufiger Grund für die Ablehnung von Apps.
Significant Location Change — ein Mechanismus für Apps, die keine ständige Geolokalisierung benötigen, aber über signifikante Benutzerbewegungen (über 500 Meter) informiert werden müssen. Das System weckt die App bei einem Wechsel des Mobilfunkmasts. Dieser Mechanismus spart im Vergleich zu ständigem GPS-Tracking erheblich Akku.
Android bietet den reichhaltigsten Satz an APIs für Hintergrundaufgaben, aber seit Version 8.0 (API 26) sind die Regeln strenger geworden. WorkManager ist die von Google empfohlene Lösung für alle Arten von Hintergrundaufgaben. WorkManager garantiert die Aufgabenausführung auch nach einem Geräteneustart (über BootReceiver) und unterstützt Aufgabenketten, beobachtbare LiveData/Flow und Abwärtskompatibilität bis API 14.
WorkManager verwendet Worker — eine Basisklasse mit der Methode doWork(). Constraints definieren die Ausführungsbedingungen: NetworkType.CONNECTED, BatteryNotLow, StorageNotLow. PeriodicWorkRequest — für periodische Aufgaben mit einem Mindestintervall von 15 Minuten. WorkManager passt sich automatisch an Doze Mode und App Standby an, indem Aufgaben in Wartungsfenstern gruppiert werden. Beispiel eines einfachen Workers:
class SyncWorker(
context: Context,
params: WorkerParameters
) : CoroutineWorker(context, params) {
override suspend fun doWork(): Result {
return try {
val repository =
Injection.provideRepository(applicationContext)
repository.syncData()
Result.success()
} catch (e: Exception) {
Result.retry()
}
}
}
// Запланировать задачу
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build()
val syncRequest = OneTimeWorkRequestBuilder<SyncWorker>()
.setConstraints(constraints)
.build()
WorkManager.getInstance(context)
.enqueue(syncRequest)
JobScheduler — eine ältere API (Android 5+, API 21). Sie plant Aufgaben mit angegebenen Bedingungen (Netzwerk, Laden, Leerlauf). Einschränkung: Sie unterstützt keinen Geräteneustart (benötigt BootReceiver) und hat keinen beobachtbaren Zustand. JobScheduler eignet sich für einfache Aufgaben in Legacy-Projekten; für neue Projekte verwenden Sie WorkManager.
Foreground Service — ein Dienst, den der Benutzer durch eine dauerhafte Benachrichtigung (ongoing notification) sieht. Verwendet für: Musikwiedergabe, GPS-Tracking, Herunterladen großer Dateien. Foreground Service hat hohe Priorität — das System beendet ihn nicht bei Speichermangel. Ab Android 13 ist für einige Typen die Berechtigung FOREGROUND_SERVICE_SPECIAL_USE erforderlich. Eine Alternative ist WorkManager mit ForegroundServiceOption (langlaufende Aufgaben).
AlarmManager — für Aufgaben, die zu einer genauen Zeit ausgeführt werden müssen (Wecker, Erinnerung). AlarmManager kann das Gerät aus dem Doze Mode aufwecken (setAlarmClock). Aufgrund des hohen Stromverbrauchs nicht für regelmäßige Synchronisation empfohlen. Für periodische Aufgaben verwenden Sie WorkManager und AlarmManager nur, wenn die genaue Zeit kritisch ist.
| Szenario | iOS | Android |
|---|---|---|
| Periodische Inhaltsaktualisierung | BGAppRefreshTask (BGTaskScheduler) | WorkManager (PeriodicWorkRequest) |
| Langlaufende Hintergrundaufgabe | BGProcessingTask | WorkManager + ForegroundService |
| Audiowiedergabe | Background Audio Mode | Foreground Service |
| GPS-Tracking | Significant Location Change / Background Location | Foreground Service + FusedLocationProvider |
| VoIP / Anrufe | PushKit + CallKit | ConnectionService + Foreground Service |
| Genaue Zeit (Wecker) | UNNotificationRequest (Kalender) | AlarmManager |
| Push-Verarbeitung (Hintergrund) | Notification Service Extension | FirebaseMessagingService (onMessageReceived) |
Doze Mode ist ein Energiesparmodus in Android, der die Ausführung von Hintergrundaufgaben beeinflusst. Eingeführt in Android 6.0 (API 23). Wenn das Gerät nicht geladen wird, der Bildschirm aus ist und das Gerät stillsteht, blockiert der Doze Mode Netzwerkanfragen und verschiebt JobScheduler und WakeLock. In regelmäßigen Abständen öffnet Doze Wartungsfenster — kurze Intervalle, in denen Apps zurückgestellte Aufgaben ausführen können. Seit Android 7.0 (API 24) wird Doze aktiviert, wenn der Bildschirm aus ist, nicht nur bei völligem Stillstand.
App Standby — ein Modus, bei dem ungenutzte Apps in den Bereitschaftszustand versetzt werden. Wenn eine App keine aktive Benachrichtigung hat und mehrere Tage nicht geöffnet wurde, wird sie in einen Standby Bucket eingeteilt: aktiv (active), working, frequent, rare. Je seltener eine App verwendet wird, desto strenger sind die Einschränkungen: Netzwerkanfragen werden verschoben, Synchronisation wird blockiert, JobScheduler wird nicht ausgeführt.
WakeLock — ein Mechanismus, der das Gerät wach hält (verhindert das Einschlafen). Wird verwendet, um wichtige Operationen abzuschließen. WakeLock muss nach Abschluss der Aufgabe freigegeben werden (release), sonst entlädt sich der Akku innerhalb weniger Stunden. WakeLock funktioniert nicht im Doze Mode — das System ignoriert ihn. Die Arbeit mit WakeLock unter Android 8+ erfordert die Berechtigung WAKE_LOCK und eine ordnungsgemäße Lebenszyklusverwaltung.
Bei IT Sectr berücksichtigen wir Doze Mode und App Standby bereits in der Entwurfsphase. WorkManager behandelt diese Modi automatisch, aber für Foreground Service muss die korrekte Behandlung von Doze-Übergängen geplant werden. Es wird empfohlen, Hintergrundarbeit auf echten Geräten mit aktiviertem Energiesparmodus und nach längeren Leerlaufzeiten zu testen.
Beachten Sie bei der Entwicklung von Hintergrundaufgaben die folgenden Tipps. 1. Verwenden Sie immer WorkManager für neue Android-Projekte. Er löst Kompatibilitätsprobleme, Doze Mode und Geräteneustart-Probleme. 2. Auf iOS bevorzugen Sie BGTaskScheduler gegenüber Background Fetch für iOS 13+. 3. Verwenden Sie Foreground Service nur, wenn die Aufgabe wirklich eine sichtbare Benachrichtigung erfordert. 4. Missbrauchen Sie WakeLock nicht — es entlädt den Akku und kann zur Ablehnung der App führen. 5. Testen Sie Hintergrundaufgaben im Doze Mode: adb shell dumpsys deviceidle force-idle. 6. Überprüfen Sie den Aufgabenabschluss immer durch Protokollierung und Analysen. 7. Denken Sie an die Grenzen: iOS gibt ~30 Sekunden für Background Fetch und ~einige Minuten für BGProcessingTask. Android WorkManager garantiert keine genaue Ausführungszeit.
Häufig gestellte Fragen
Background Service läuft ohne sichtbare Benachrichtigung und kann vom System jederzeit beendet werden. Foreground Service muss eine dauerhafte Benachrichtigung (ongoing notification) anzeigen und hat eine höhere Priorität. Foreground Service wird verwendet für Musikwiedergabe und GPS-Tracking.
Doze Mode ist ein Android-Energiesparmodus, der den Netzwerkzugriff deaktiviert und JobScheduler/WakeLock verschiebt, wenn das Gerät nicht verwendet wird. WorkManager passt sich automatisch an den Doze Mode an.
Auf iOS werden Hintergrundaufgaben über Background Fetch (periodische Aktualisierungen), BGTaskScheduler (zurückgestellte Aufgaben) oder Background Modes (Audio, VoIP, BLE, Standort) ausgeführt. BGTaskScheduler ist die moderne API für iOS 13+, die Background Fetch ersetzt.
WorkManager ist die von Google empfohlene Lösung für alle Hintergrundaufgaben auf Android. JobScheduler ist eine ältere API mit eingeschränkten Fähigkeiten. WorkManager unterstützt Aufgabenketten, beobachtbare LiveData/Flow und Abwärtskompatibilität bis API 14.
App Standby ist ein Android-Modus, bei dem ungenutzte Apps in einen Bereitschaftszustand versetzt werden: Netzwerkanfragen werden verschoben, die Synchronisation wird angehalten. Wenn eine App mehrere Tage nicht verwendet wird, versetzt Android sie in einen Standby Bucket (active, working, frequent, rare).
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.