BGTaskScheduler: Was es ist, Hintergrundaufgaben in iOS

Autor: IT Sectr Veröffentlicht: 2026-03-27 Lesezeit: 8 Min.

BGTaskScheduler ist ein Apple-Framework zum Planen und Ausführen von Hintergrundaufgaben in iOS 13 und neuer. Es ersetzte die veralteten Background Fetch und performFetch und bietet eine einheitliche API für Hintergrundoperationen. Laut Apple Developer Documentation, 2026 umfasst das Framework zwei Aufgabentypen: BGProcessingTask für langlaufende Operationen und BGAppRefreshTask für kurze Inhaltsaktualisierungen.

Wichtige Punkte

  • BGTaskScheduler ist ein iOS 13+-Framework zur Verwaltung von Hintergrundaufgaben, das den alten Background Fetch ersetzt hat.
  • BGAppRefreshTask ist eine kurze Hintergrundaufgabe von bis zu 30 Sekunden zur Inhaltsaktualisierung.
  • BGProcessingTask ist eine langlaufende Hintergrundaufgabe von bis zu mehreren Minuten für ressourcenintensive Operationen.
  • Die Registrierung erfolgt in Info.plist über Identifikatoren und im Code über handleTasks.
  • Das System bestimmt automatisch den optimalen Zeitpunkt zum Starten von Aufgaben basierend auf dem Benutzerverhalten.

Was ist BGTaskScheduler?

BGTaskScheduler ist ein Apple-System-Framework, das in iOS 13 eingeführt wurde und die Ausführung von Hintergrundaufgaben zentral verwaltet. Vor seiner Einführung verwendeten Entwickler UIApplication backgroundTasks, performFetch und Ereignisbehandlung in appDelegate, was zu Code-Fragmentierung und unvorhersehbarem Verhalten führte.

Das Framework arbeitet nach dem Prinzip der verzögerten Planung: Die App registriert Aufgaben mit eindeutigen Identifikatoren, und iOS bestimmt selbst den optimalen Zeitpunkt für ihre Ausführung. Das System berücksichtigt Akkustand, Benutzeraktivität, Netzwerkstatus und andere Faktoren.

Zu den Hauptfunktionen gehört die Arbeit sowohl mit kurzen als auch mit langen Hintergrundoperationen. Anders als AlarmManager unter Android garantiert BGTaskScheduler keine genaue Ausführungszeit — das System behält sich das Recht vor, eine Aufgabe zu verzögern, wenn die Bedingungen ungünstig sind.

Wie funktioniert BGTaskScheduler in iOS?

BGTaskScheduler verwendet eine handlerbasierte Architektur. Die App registriert einen Handler für jeden Aufgabentyp, und das System ruft ihn auf, wenn der richtige Zeitpunkt gekommen ist. Das Framework selbst führt die Aufgabe nicht direkt aus — es benachrichtigt lediglich die App, dass es Zeit ist, sie auszuführen.

Task-Registrierungsprozess

Die Registrierung beginnt mit der Deklaration des Aufgabenidentifikators in Info.plist über das BGTaskSchedulerPermittedIdentifiers-Array. Dann wird im App-Code die Methode registerHandler(forTaskWithIdentifier:) mit einem Handler-Closure aufgerufen.

swift
import BackgroundTasks

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

BGTaskScheduler.shared.registerHandler(
    forTaskWithIdentifier: taskID,
    using: DispatchQueue.global()
) { task in
    task.expirationHandler = {
        // wird bei Zwangsbeendigung aufgerufen
    }
    processBackgroundTask(task as! BGAppRefreshTask)
}

Ausführungsplanung

Nach der Registrierung muss die App die Aufgabenausführung explizit über submitTaskRequest anfordern. Die Anfrage enthält den Aufgabenidentifikator und das frühestmögliche Startdatum. Das System speichert die Anfrage und verarbeitet sie, wenn es die Bedingungen für geeignet hält.

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

do {
    try BGTaskScheduler.shared.submit(request)
} catch {
    print("Planungsfehler: \(error)")
}

Arten von BGTaskScheduler-Hintergrundaufgaben

BGTaskScheduler bietet zwei Haupttypen von Aufgaben, die jeweils für ihren eigenen Anwendungsfall konzipiert sind. Die Wahl des richtigen Typs beeinflusst direkt die Wahrscheinlichkeit einer erfolgreichen Aufgabenausführung durch das System.

BGAppRefreshTask

BGAppRefreshTask ist für kurze Hintergrundinhaltsaktualisierungen konzipiert: Laden neuer Daten, Synchronisieren mit dem Server, Aktualisieren von Widgets. Die Ausführungszeit ist auf 30 Sekunden begrenzt, danach beendet das System die Aufgabe zwangsweise. Dieser Aufgabentyp wird häufiger ausgeführt als BGProcessingTask und hat eine höhere Priorität.

BGProcessingTask

BGProcessingTask ist für längere Operationen konzipiert: Verarbeiten von Mediendateien, Indizieren von Core Data, Erstellen von Sicherungskopien. Die Aufgabe kann bis zu mehreren Minuten laufen, aber das System startet sie seltener und nur unter günstigen Bedingungen — mit Stromverbindung, stabilem WLAN und geringer Geräteauslastung.

ParameterBGAppRefreshTaskBGProcessingTask
Zeitlimit30 Sekundenmehrere Minuten
Starthäufigkeithochniedrig
BedingungenbeliebigStrom + WLAN
Erfordert Stromneinempfohlen
BeispielFeed aktualisierenVideo verarbeiten

Registrierung und Planung

Die korrekte Registrierung ist eine zwingende Voraussetzung für die Funktion von BGTaskScheduler. Wenn eine Aufgabe nicht in Info.plist registriert ist, ignoriert das System jede Anfrage zu ihrer Ausführung.

Registrierung in Info.plist

Die Info.plist-Datei muss das BGTaskSchedulerPermittedIdentifiers-Array mit einer Liste von Zeichenfolgenidentifikatoren enthalten. Jeder Identifikator muss innerhalb der App eindeutig sein. Apple empfiehlt die Verwendung der umgekehrten Domain-Notation.

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

Planung und Stornierung

Verwenden Sie zum Planen einer Aufgabe die Methode submitTaskRequest. Wenn eine Aufgabe nicht mehr benötigt wird, kann sie über cancelTaskRequest oder cancelAllTaskRequests storniert werden. Das System storniert Aufgaben auch automatisch, wenn die App gelöscht oder Daten zurückgesetzt werden.

Überwachung des Aufgabenstatus

BGTaskScheduler bietet die Möglichkeit, den Status geplanter Aufgaben über getPendingTaskRequests zu verfolgen. Diese Methode gibt eine Liste aller aktiven Anfragen mit Informationen zu Typ, Identifikator und earliestBeginDate zurück. Für jede Anfrage können Sie prüfen, ob sie bereits abgeschlossen oder storniert wurde, und über eine Neuplanung entscheiden.

Es ist wichtig zu beachten, dass das System keinen direkten Rückruf über den Erfolg einer Hintergrundaufgabe bereitstellt — der Handler selbst muss das Ergebnis über die Aufgabeneigenschaften melden. setTaskCompleted ermöglicht es, eine Aufgabe als erfolgreich abgeschlossen zu markieren, wonach das System die nächste geplante Aufgabe dieses Typs starten kann. Wenn eine Aufgabe setTaskCompleted nicht aufruft, betrachtet das System sie als bei Zeitüberschreitung oder Zwangsbeendigung abgeschlossen.

Zur Diagnose wird empfohlen, OSLog im Handler zu verwenden und die Protokolle über die Console.app auf dem Mac anzuzeigen. Apple bietet auch das MetricKit-Tool zur Analyse der Leistung von Hintergrundaufgaben — es sammelt Daten zur Ausführungszeit, zum Energieverbrauch und zur Startfrequenz, die für die Optimierung verwendet werden können.

swift
// Bestimmte Aufgabe stornieren
BGTaskScheduler.shared.cancel(taskRequestWithIdentifier: taskID)

// Alle Aufgaben stornieren
BGTaskScheduler.shared.cancelAllTaskRequests()

// Geplante Aufgaben prüfen
BGTaskScheduler.shared.getPendingTaskRequests { requests in
    print("\(requests.count) Aufgaben geplant")
}

Einschränkungen und Empfehlungen

BGTaskScheduler legt strenge Einschränkungen für die Hintergrundarbeit fest. Das System kann eine Aufgabe auf unbestimmte Zeit verzögern, wenn die Bedingungen ungünstig sind. Entwickler müssen verstehen, dass das Framework nicht für Echtzeitaufgaben gedacht ist.

Zu den wichtigsten Einschränkungen gehören: Das System garantiert keine Aufgabenausführung zur angegebenen Zeit, die maximale Anzahl gleichzeitiger Aufgaben ist begrenzt und der Energieverbrauch wird streng kontrolliert. Das Ausführen mehrerer Aufgaben hintereinander kann zu deren Zusammenführung oder Stornierung führen.

Um die Wahrscheinlichkeit der Ausführung zu erhöhen, wird empfohlen, earliestBeginDate nicht früher als 1 Stunde für BGProcessingTask und 15 Minuten für BGAppRefreshTask zu setzen. Es ist auch wichtig, expirationHandler zu behandeln — wenn eine Aufgabe ihr Zeitlimit nicht einhalten kann, ruft das System diesen Handler zur ordnungsgemäßen Beendigung auf. Die Neuplanung sollte innerhalb des Handlers selbst erfolgen, um einen kontinuierlichen Hintergrundarbeitszyklus aufrechtzuerhalten.

Eine weitere wichtige Einschränkung betrifft Netzwerkanfragen. BGTaskScheduler garantiert keine aktive Netzwerkverbindung während der Aufgabenausführung. Die App muss die Netzwerkverfügbarkeit eigenständig über NWPathMonitor prüfen und die Verarbeitung verschieben, wenn keine Verbindung besteht. Dies unterscheidet sich von Android JobScheduler, der eine Aufgabe nur aktivieren kann, wenn eine Verbindung zu einem bestimmten Netzwerktyp besteht. In der Praxis kombinieren Entwickler BGTaskScheduler oft mit Hintergrund-URL-Sitzungen von NSURLSession für zuverlässiges Datenladen.

Kompatibilität mit macOS und watchOS

Ab macOS Catalina ist BGTaskScheduler auch auf dem Mac verfügbar. Dies ermöglicht die Erstellung plattformübergreifender Hintergrundaufgaben für UIKit-Apps, die auf Apple Silicon ausgeführt werden. Auf watchOS hat das Framework eingeschränkte Funktionalität — nur kurze BGAppRefreshTask sind zum Aktualisieren von Komplikationen und Synchronisieren von Daten mit dem iPhone verfügbar. Entwickler sollten bei der Planung der Hintergrundarchitektur Plattformunterschiede berücksichtigen.

Debugging- und Diagnosetools

Apple stellt mehrere Tools zum Debuggen von BGTaskScheduler bereit. Der Befehl e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.example.task"] in lldb startet eine Hintergrundaufgabe zwangsweise und umgeht dabei Systembeschränkungen. Xcode hat ein Simulate Background Fetch-Flag im Debug-Menü, das eine kurze Hintergrundaktualisierung emuliert. MetricKit wird für die Leistungsanalyse verwendet — es sammelt Informationen über Startfrequenz, Ausführungsdauer und Energieverbrauch jeder Aufgabe. Diese Daten helfen, die Planungshäufigkeit zu optimieren und den richtigen Aufgabentyp auszuwählen.

In der Praxis eignet sich BGTaskScheduler gut zum Aktualisieren von Widget-Daten, iCloud-Synchronisierung, Verarbeiten von Push-Benachrichtigungen mit Inhalten und Indizieren für die Spotlight-Suche. Es eignet sich nicht für Echtzeitanalysen, Chat-Anwendungen oder Aufgaben, die eine sofortige Ausführung erfordern.

Apple-Ressourcen und Dokumentation

Für ein vertieftes Studium von BGTaskScheduler empfiehlt Apple die offizielle WWDC-Dokumentation: Die Sitzung „Advances in Background Tasks“ (2020) behandelt die Migration von veralteten APIs, und „Background Tasks in Practice“ (2021) enthält reale Anwendungsfälle. Der Abschnitt Energy Efficiency Guide ist ebenfalls nützlich und beschreibt, wie das Framework in Apples gesamte Energiesparstrategie passt. Codebeispiele sind im offiziellen Apple Developer-Repository auf GitHub mit vollständigen Projekten für iOS und macOS verfügbar.

Häufig gestellte Fragen

Wie unterscheidet sich BGTaskScheduler von Background Fetch in iOS 12?

Background Fetch war auf eine Hintergrundaufgabe pro App beschränkt und hatte keinen Prioritätsmechanismus. BGTaskScheduler unterstützt mehrere Aufgaben mit verschiedenen Typen, bietet eine einheitliche API und automatische Energieverwaltung.

Wie viele Hintergrundaufgaben können in BGTaskScheduler registriert werden?

Apple legt keine explizite Grenze für die Anzahl registrierter Identifikatoren fest, aber in der Praxis wird empfohlen, nicht mehr als 5–10 Aufgaben zu verwenden. Eine größere Anzahl verringert die Wahrscheinlichkeit, dass jede einzelne Aufgabe aufgrund von Wettbewerb um Systemressourcen ausgeführt wird.

Wie debugge ich die BGTaskScheduler-Ausführung auf einem echten Gerät?

Verwenden Sie zum Debuggen den Befehl e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.example.task"] in lldb. Er startet eine Aufgabe zwangsweise und umgeht Systembeschränkungen. Das Xcode Simulate Background Fetch-Flag im Debug-Menü ist ebenfalls verfügbar.

Kann BGTaskScheduler eine Aufgabe ausführen, wenn die App beendet wurde?

Ja, BGTaskScheduler kann einen Prozess starten, selbst wenn die App vom Benutzer zwangsweise beendet wurde. Das System kann jedoch zusätzliche Verzögerungen anwenden, und nicht alle Aufgabentypen garantieren die Ausführung in diesem Szenario.

Was passiert, wenn eine Aufgabe nicht innerhalb der vorgegebenen Zeit abgeschlossen wird?

Das System ruft expirationHandler auf und signalisiert der Aufgabe, dass sie beendet werden muss. Ignoriert die App dieses Signal und arbeitet weiter, beendet iOS den Prozess zwangsweise. Danach kann das System die Priorität aller Hintergrundaufgaben der App herabsetzen.

Zusammenfassung

  • BGTaskScheduler ist Apples einheitliches Framework zur Verwaltung aller Hintergrundaufgaben in iOS 13+ und macOS Catalina+.
  • Zwei Aufgabentypen — BGAppRefreshTask bis zu 30 Sekunden und BGProcessingTask bis zu mehreren Minuten — decken verschiedene Hintergrundarbeitsszenarien ab.
  • Die Registrierung ist an zwei Stellen erforderlich: Info.plist (Identifikatoren) und Code (registerHandler).
  • Die Planung erfolgt über submitTaskRequest mit earliestBeginDate — das System wählt den optimalen Startzeitpunkt.
  • ExpirationHandler ist zur Behandlung der Zwangsbeendigung von Aufgaben durch das System obligatorisch.
  • Einschränkungen umfassen keine Ausführungsgarantie, Energieverbrauchskontrolle und Abhängigkeit vom Gerätezustand.
  • Verwenden Sie BGTaskScheduler für Inhaltsaktualisierungen, Synchronisierung und Indizierung, aber nicht für Echtzeitaufgaben.

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.

Projekt besprechen

Lesen Sie auch