Background Task: Schlüsselkonzepte, Aufgabenregistrierung und Hintergrundausführung

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

Background Task ist ein iOS-Mechanismus, der es einer Anwendung ermöglicht, einen Vorgang nach dem Übergang in den Hintergrund abzuschließen. Das System weist eine begrenzte Zeit (bis zu 30 Sekunden) für die Ausführung der Aufgabe zu, danach wird die Anwendung zwangsweise ausgesetzt. Laut Apple, 2026 ist die Verwendung eines Expiration Handlers eine zwingende Voraussetzung für den korrekten Abschluss einer Hintergrundaufgabe.

Wichtige Punkte

  • Background Task — ein iOS-Mechanismus zum Abschließen von Vorgängen, nachdem die App in den Hintergrund geht.
  • beginBackgroundTask — die wichtigste UIApplication-Methode zum Registrieren einer Hintergrundaufgabe.
  • Expiration Handler — ein Codeblock, der vom System aufgerufen wird, wenn die zugewiesene Zeit abläuft.
  • 30-Sekunden-Limit — Standardausführungszeit, erweiterbar über Background Modes.
  • UIApplication.shared.endBackgroundTask — ein obligatorischer Aufruf zum korrekten Abschließen der Aufgabe.

Was ist Background Task in iOS?

Background Task ist ein programmierbarer iOS-Mechanismus, der es einer Anwendung ermöglicht, die Ausführungszeit nach dem Übergang in den Hintergrund zu verlängern. Wenn der Benutzer die Anwendung minimiert, ruft das System UIApplicationDelegate.applicationDidEnterBackground auf. Wenn zu diesem Zeitpunkt ein kritischer Vorgang ausgeführt wird (Daten speichern, eine Anfrage senden), kann die Anwendung über beginBackgroundTask zusätzliche Zeit anfordern.

Warum Background Tasks benötigt werden

Ohne Verwendung von Background Task wird die Anwendung 3–5 Sekunden nach dem Wechsel in den Hintergrund zwangsweise ausgesetzt. Alle unvollständigen Vorgänge werden unterbrochen: Daten werden nicht gespeichert, Netzwerkanfragen werden abgebrochen, Zustände gehen verloren. Background Task gibt der Anwendung bis zu 30 Sekunden, um diese Vorgänge ordnungsgemäß abzuschließen.

  • Zustandsspeicherung — Schreiben von Daten in CoreData, UserDefaults oder das Dateisystem.
  • Netzwerkanfragen abschließen — auf Serverantwort warten und Ergebnis verarbeiten.
  • Analytik senden — Ereignisse vor der Aussetzung an den Analytik-Server übermitteln.
  • Ressourcenbereinigung — Dateideskriptoren schließen, Speicher freigeben.
  • Caching — Zwischenergebnisse zur Wiederherstellung beim nächsten Start schreiben.

Geschichte und Entwicklung

beginBackgroundTask erschien in iOS 4.0 — der ersten Version mit Multitasking-Unterstützung. Vor iOS 4 wurde die Anwendung beim Drücken der Home-Taste vollständig beendet. iOS 7 führte Background Fetch und URLSession-Hintergrundkonfiguration ein. Ab iOS 13 empfiehlt Apple BGTaskScheduler für neue Projekte, aber beginBackgroundTask bleibt für kurzfristige Vorgänge relevant.

Wie beginBackgroundTask funktioniert: Lebenszyklus

beginBackgroundTask ist eine UIApplication-Methode, die eine Aufgabe registriert und eine eindeutige UIBackgroundTaskIdentifier zurückgibt. Das System erhöht den Hintergrundausführungs-Timer. Wenn die Zeit abläuft, wird der Expiration Handler aufgerufen, danach muss die Anwendung endBackgroundTask(identifier:) aufrufen, um die Aufgabe korrekt abzuschließen.

Schritt-für-Schritt-Ausführungsprozess

Schritt 1 — die Anwendung erhält die didEnterBackground-Benachrichtigung. Schritt 2 — beginBackgroundTask(expirationHandler:) wird aufgerufen. Schritt 3 — der kritische Vorgang (Speicherung, Netzwerkanfrage) wird ausgeführt. Schritt 4 — bei Abschluss wird endBackgroundTask(identifier:) aufgerufen. Wenn der Vorgang nicht innerhalb von 30 Sekunden abgeschlossen wird, ruft das System den Expiration Handler auf, und die Anwendung muss die Aufgabe sofort beenden.

swift
var backgroundTaskID: UIBackgroundTaskIdentifier = .invalid

func startBackgroundTask() {
    backgroundTaskID = UIApplication.shared.beginBackgroundTask {
        // Expiration Handler
        UIApplication.shared.endBackgroundTask(backgroundTaskID)
        backgroundTaskID = .invalid
    }
}

func finishBackgroundTask() {
    UIApplication.shared.endBackgroundTask(backgroundTaskID)
    backgroundTaskID = .invalid
}

UIApplication.shared.backgroundTimeRemaining

Die Eigenschaft backgroundTimeRemaining gibt die Anzahl der Sekunden zurück, die verbleiben, bevor die Hintergrundaufgabe zwangsweise beendet wird. Der Wert nimmt in Echtzeit ab. Wenn die Anwendung nicht im Hintergrund ist, wird DBL_MAX zurückgegeben. Verwenden Sie diese Eigenschaft, um das Verhalten anzupassen: Wenn weniger als 5 Sekunden verbleiben, unterbrechen Sie langlaufende Vorgänge und speichern Sie den Fortschritt.

Mehrere Aufgaben

Eine Anwendung kann mehrere Background Tasks gleichzeitig registrieren. Jede Aufgabe erhält eine eigene Kennung. Die gesamte Ausführungszeit ist kumulativ — wenn 3 Aufgaben registriert sind, kann die Anwendung bis zu 90 Sekunden erhalten. Das System kann die Anwendung jedoch vorzeitig beenden, wenn Ressourcen erschöpft sind oder das Batterielimit überschritten wird.

Expiration Handler: Obligatorische Abschlussbehandlung

Expiration Handler ist ein Codeblock, den das System aufruft, wenn die für die Hintergrundaufgabe zugewiesene Zeit abläuft. Das Vorhandensein eines Expiration Handlers ist eine zwingende Anforderung von Apple. Ohne ihn kann die Anwendung vom System zwangsweise beendet werden und Daten können verloren gehen.

Was sollte im Expiration Handler enthalten sein

Der Expiration Handler muss minimale Aktionen ausführen, um den Anwendungszustand zu sichern: aktuelle Daten im persistenten Speicher speichern, endBackgroundTask mit der entsprechenden Kennung aufrufen und die Kennung auf .invalid setzen. Innerhalb des Expiration Handlers ist es verboten, neue langlaufende Vorgänge zu starten — die Ausführungszeit ist auf 1–2 Sekunden begrenzt.

swift
func handleExpiration() {
    // Ausführungsfortschritt speichern
    saveProgressToUserDefaults()

    // Aktive Netzwerkanfragen abbrechen
    currentTask?.cancel()

    // Background Task beenden
    UIApplication.shared.endBackgroundTask(backgroundTaskID)
    backgroundTaskID = .invalid
}

// Registrierung mit Expiration Handler
backgroundTaskID = UIApplication.shared.beginBackgroundTask(
    withName: "SaveDocument",
    expirationHandler: handleExpiration
)

Häufige Fehler mit dem Expiration Handler

Der häufigste Fehler ist, endBackgroundTask nicht innerhalb des Expiration Handlers aufzurufen. In diesem Fall betrachtet das System die Aufgabe weiterhin als aktiv, die Anwendung wechselt nicht in den Suspended-Zustand und der Akku entlädt sich. Der zweite Fehler ist das Starten langlaufender Vorgänge innerhalb des Expiration Handlers. Das System kann die Anwendung beenden, bevor diese abgeschlossen sind, und Daten gehen verloren.

Überprüfung der verbleibenden Zeit

Im Expiration Handler ist die Ausführungszeit kritisch begrenzt — typischerweise weniger als 1 Sekunde. Daher können innerhalb des Handlers nicht ausgeführt werden: komplexe Berechnungen, Netzwerkanfragen, Schreiben großer Datenmengen in CoreData. Nur atomare Operationen: Schreiben eines einzelnen Schlüssels in UserDefaults, Setzen einer Zustandsmarkierung, Aufruf von endBackgroundTask.

Background Task-Codebeispiele in Swift

Sehen wir uns eine vollständige Background Task-Implementierung zum Speichern eines Dokuments an, wenn die App in den Hintergrund geht. Das Beispiel umfasst Aufgabenregistrierung, Ausführung des Vorgangs mit Überprüfung der verbleibenden Zeit und ordnungsgemäßen Abschluss über endBackgroundTask.

Speichern eines Dokuments mit Fortschritt

Beim Wechsel in den Hintergrund initiiert die Anwendung das Speichern eines großen Dokuments. Background Task bietet bis zu 30 Sekunden für den Vorgang. Wenn die Zeit abläuft, speichert der Expiration Handler Zwischenergebnisse. Nach Abschluss des Speichervorgangs wird endBackgroundTask aufgerufen, um Ressourcen freizugeben.

swift
class DocumentManager {
    private var backgroundTaskID: UIBackgroundTaskIdentifier = .invalid

    func saveDocumentInBackground(document: Document) {
        backgroundTaskID = UIApplication.shared.beginBackgroundTask {
            self.saveProgress(document)
            self.endBackgroundTask()
        }

        DispatchQueue.global().async {
            document.save()
            self.endBackgroundTask()
        }
    }

    private func endBackgroundTask() {
        UIApplication.shared.endBackgroundTask(backgroundTaskID)
        backgroundTaskID = .invalid
    }
}

Senden von Daten an den Server

Netzwerkanfragen im Hintergrund erfordern besondere Aufmerksamkeit — der Expiration Handler kann die Anfrage unterbrechen, bevor eine Antwort eingeht. Verwenden Sie URLSession mit dataTask und überprüfen Sie backgroundTimeRemaining vor dem Senden. Wenn weniger als 5 Sekunden verbleiben, verschieben Sie das Senden bis zum nächsten Aufwachen der App.

swift
func sendCriticalData(data: Data) {
    backgroundTaskID = UIApplication.shared.beginBackgroundTask {
        // Daten für erneutes Senden speichern
        saveForRetry(data)
        self.endBackgroundTask()
    }

    let task = URLSession.shared.dataTask(with: request) { _, _, error in
        if error != nil {
            saveForRetry(data)
        }
        self.endBackgroundTask()
    }
    task.resume()
}

Überwachung der verbleibenden Zeit

Überwachen Sie bei langlaufenden Vorgängen UIApplication.shared.backgroundTimeRemaining. Wenn der Wert unter einen Schwellenwert (10 Sekunden) fällt, unterbrechen Sie den aktuellen Vorgang und beginnen Sie mit dem Speichern von Zwischenergebnissen. Dies ermöglicht einen ordnungsgemäßen Abschluss, bevor der Expiration Handler zwangsweise aufgerufen wird.

Bewährte Verfahren für die Verwendung von Background Task

Background Task ist ein leistungsstarker Mechanismus, aber seine unsachgemäße Verwendung führt zu Batterie- und Leistungsproblemen. Die Befolgung der Apple-Empfehlungen und bewährter Community-Praktiken hilft, häufige Fehler zu vermeiden und einen stabilen Anwendungsbetrieb zu gewährleisten.

Ausführungszeit minimieren

Schließen Sie die Background Task so schnell wie möglich ab. Jede Sekunde der Hintergrundausführung verbraucht Akkuleistung. Optimale Zeit — weniger als 5 Sekunden. Wenn der Vorgang länger dauert, erwägen Sie die Verwendung von BGTaskScheduler oder Background Modes. Verlängern Sie die Aufgabe nicht künstlich durch beginBackgroundTask-Aufrufe ohne tatsächlichen Bedarf.

Richtige Verwendung von Kennungen

Speichern Sie UIBackgroundTaskIdentifier als Eigenschaft einer Klasse oder Struktur. Übergeben Sie es niemals als globale Variable — dies führt zu Konflikten bei mehreren Aufgaben. Setzen Sie die Kennung nach dem Aufruf von endBackgroundTask auf .invalid, um einen doppelten Abschluss zu verhindern.

Testen von Background Task

Wechseln Sie im Xcode-Simulator über die Home-Taste (Command + Shift + H) in den Hintergrund. Verwenden Sie Debug — Simulate Background Fetch zum Testen des Hintergrundaufwachens. Um den Zeitablauf zu simulieren, setzen Sie die Umgebungsvariable BACKGROUND_TASK_SIMULATE_EXPIRATION = YES — der Expiration Handler wird innerhalb von 5 Sekunden aufgerufen.

swift
// Verbleibende Zeit vor Operationsbeginn prüfen
let remaining = UIApplication.shared.backgroundTimeRemaining
guard remaining > 10.0 else {
    // Nicht genug Zeit — Aufgabe verschieben
    scheduleForNextLaunch()
    return
}

// Operation mit Zeitkontrolle ausführen
backgroundTaskID = UIApplication.shared.beginBackgroundTask {
    saveProgress()
    self.endBackgroundTask()
}

Retain-Zyklen vermeiden

Der Expiration Handler erfasst self — dies kann einen Retain-Zyklus erzeugen, wenn backgroundTaskID als Eigenschaft desselben Objekts gespeichert ist. Verwenden Sie [weak self] im Closure oder speichern Sie die Kennung separat. Ein Retain-Zyklus führt zu einem Speicherleck — das Objekt wird erst freigegeben, wenn die Anwendung beendet wird.

Background Task vs. BGTaskScheduler: Ansatzvergleich

Mit der Veröffentlichung von iOS 13 führte Apple BGTaskScheduler ein — einen modernen Ersatz für die alte Background Task API. Beide Mechanismen lösen ähnliche Aufgaben, aber BGTaskScheduler bietet mehr Kontrolle und Flexibilität. Das Verständnis der Unterschiede hilft bei der Auswahl des richtigen Werkzeugs für ein bestimmtes Szenario.

MerkmalBackground TaskBGTaskScheduler
iOS-Version4.0+13.0+
Max. Zeit30 Sekunden30 s / 10 Min. (processing)
Initiiert durchdidEnterBackgroundPlanung + System
AusführungsgarantieNur beim Wechsel in den HintergrundZu jeder für das System passenden Zeit
Expiration HandlerJa, obligatorischJa, über task.expirationHandler
InternetBeim Start erforderlichVerfügbar über requiresNetworkConnectivity
LadenNicht erforderlichOptional für processing

Wann Background Task verwenden

beginBackgroundTask eignet sich für kurzfristige Vorgänge, die sofort beim Wechsel in den Hintergrund ausgeführt werden müssen: Zustand speichern, Netzwerkanfrage abschließen, Daten zwischenspeichern. Die API ist einfach und erfordert keine Info.plist-Konfiguration oder Kennungsregistrierung. Ideal für Vorgänge, die weniger als 10 Sekunden dauern.

Wann BGTaskScheduler verwenden

BGTaskScheduler eignet sich für Aufgaben, die zu jeder passenden Zeit ausgeführt werden können: periodische Synchronisierung, Cache-Bereinigung, Widget-Aktualisierungen. Das System selbst wählt den optimalen Zeitpunkt unter Berücksichtigung des Benutzerverhaltens und des Batteriezustands. Für langlaufende Vorgänge (bis zu 10 Minuten) verwenden Sie BGProcessingTask.

Kombinierte Nutzung

Beide APIs können in derselben Anwendung verwendet werden. Background Task — für sofortige Vorgänge beim Wechsel in den Hintergrund (Speichern eines Entwurfs). BGTaskScheduler — für geplante Aktualisierungen (Synchronisierung alle 6 Stunden). Die Aufgabentrennung gewährleistet ordnungsgemäße Datenspeicherung und energieeffiziente Hintergrundwartung.

Häufig gestellte Fragen

Kann beginBackgroundTask außerhalb von didEnterBackground aufgerufen werden?

Ja, beginBackgroundTask kann zu jedem Zeitpunkt der Anwendungsausführung aufgerufen werden. Die Systemzeit-Zuteilung beginnt jedoch erst nach dem Übergang in den Hintergrund. Wenn sich die Anwendung im Vordergrund befindet, hat der Aufruf von beginBackgroundTask keine Auswirkung — backgroundTimeRemaining gibt DBL_MAX zurück, und die Aufgabe wird beim Wechsel in den Hintergrund aktiviert.

Was passiert, wenn endBackgroundTask nicht aufgerufen wird?

Wenn endBackgroundTask nicht aufgerufen wird, betrachtet das System die Anwendung weiterhin als aktiv im Hintergrund. Nach 30 Sekunden wird der Expiration Handler aufgerufen, aber wenn auch ihm endBackgroundTask fehlt, bleibt die Anwendung im Speicher und entlädt den Akku. In iOS 13+ beendet das System eine solche Anwendung nach 3 Minuten zwangsweise.

Wie kann Background Task über 30 Sekunden hinaus verlängert werden?

Die Standardzeit beträgt 30 Sekunden. Sie kann nur über Background Modes verlängert werden: Audio (Wiedergabe), Standort (Geolokalisierung), Bluetooth (BLE). Oder über BGProcessingTask (iOS 13+) — bis zu 10 Minuten mit Ladung und Wi-Fi. beginBackgroundTask selbst bietet keine Möglichkeit, das Limit zu erhöhen.

Funktioniert Background Task auf dem iPad?

Ja, iPadOS unterstützt beginBackgroundTask vollständig mit denselben Einschränkungen wie iOS. Auf dem iPad mit Stage Manager kann die Anwendung länger im Speicher bleiben — das System setzt Anwendungen aufgrund des größeren RAM seltener aus. Das 30-Sekunden-Limit für Hintergrundaufgaben bleibt jedoch bestehen.

Wie debuggt man Background Task auf einem echten Gerät?

Verbinden Sie das Gerät mit Xcode, starten Sie die Anwendung und minimieren Sie sie — Systemprotokolle erscheinen in der Konsole. Verwenden Sie sysdiagnose zum Sammeln detaillierter Protokolle: Lösen Sie sysdiagnose vom Gerät aus (Lautstärke hoch + Lautstärke runter + Ein/Aus). Im Xcode Debug Navigator überwachen Sie die Aktivität von Hintergrundaufgaben.

Zusammenfassung

  • Background Task — ein iOS-Mechanismus zum Abschließen von Vorgängen nach dem Wechsel in den Hintergrund, verfügbar seit iOS 4.0.
  • beginBackgroundTask — eine UIApplication-Methode, die eine Aufgabe registriert und eine Kennung für deren Abschluss zurückgibt.
  • Expiration Handler — ein obligatorischer Codeblock, der vom System aufgerufen wird, wenn das 30-Sekunden-Limit abläuft.
  • endBackgroundTask — ein obligatorischer Aufruf zum korrekten Abschließen der Aufgabe; ohne ihn bleibt die Anwendung im Speicher.
  • BGTaskScheduler — eine moderne Alternative (iOS 13+) mit Planung, zwei Aufgabentypen und Ausführungsbedingungen.
  • backgroundTimeRemaining — eine Eigenschaft zum Überprüfen der verbleibenden Zeit und Anpassen des Aufgabenverhaltens.
  • Verwenden Sie Background Task für sofortige kurzfristige Vorgänge und BGTaskScheduler für geplante Hintergrundaktualisierungen in neuen Projekten.

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