0Pricing
Swift Academy · Lektion

Hintergrundaufgaben und Aktualisierung

Planen Sie Hintergrundarbeit mit BGTaskScheduler.

Hintergrundaufgaben und Aktualisierung ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Warum es Background Tasks gibt

iOS hält Apps zum Energiesparen konsequent an, wenn sie sich im Hintergrund befinden. Um im Hintergrund sinnvolle Aufgaben auszuführen – etwa einen Feed zu aktualisieren oder einen Download zu verarbeiten –, planen Sie diese über BGTaskScheduler. Das System entscheidet, wann die Aufgabe ausgeführt wird, und wägt dabei Ihre Anforderungen gegen den Energieverbrauch und die Nutzungsmuster ab.

import BackgroundTasks
// You request work; the system schedules it later
// at an opportune moment (charging, on Wi-Fi, etc.)

Zwei Task-Typen

Es gibt zwei Arten: BGAppRefreshTask für kurze, häufige Aktualisierungen (Sekunden) und BGProcessingTask für längere, aufwendigere Aufgaben (Minuten) wie Datenbankwartung, für die optional eine Stromversorgung oder Netzwerkverbindung erforderlich sein kann.

import BackgroundTasks
// BGAppRefreshTask  -> quick content refresh
// BGProcessingTask  -> long maintenance, can require
//                      external power / network

Bezeichner deklarieren

Jede Aufgabe benötigt einen eindeutigen Bezeichner, den Sie in Info.plist unter BGTaskSchedulerPermittedIdentifiers angeben. Ohne diese Deklaration schlägt die Registrierung fehl. Verwenden Sie Zeichenketten im Reverse-DNS-Format.

// Info.plist:
// BGTaskSchedulerPermittedIdentifiers = [
//   "com.example.app.refresh",
//   "com.example.app.cleanup"
// ]
let ids = "declare every identifier in Info.plist"
_ = ids

Einen Handler registrieren

Registrieren Sie beim Start für jeden Bezeichner einen Handler mit BGTaskScheduler.shared.register. Dies muss vor dem Abschluss des App-Starts geschehen. Der Handler wird ausgeführt, sobald das System die Aufgabe später ausführt.

import BackgroundTasks
func registerTasks() {
    BGTaskScheduler.shared.register(
        forTaskWithIdentifier: "com.example.app.refresh",
        using: nil) { task in
        handleRefresh(task as! BGAppRefreshTask)
    }
}

Eine Anfrage übermitteln

Durch die Registrierung wird nur der Handler eingerichtet. Um tatsächlich eine Ausführung anzufordern, erstellen Sie eine BGAppRefreshTaskRequest, legen Sie das frühestmögliche Startdatum fest und übermitteln Sie die Anfrage mit submit. Das System behandelt dieses Datum als Hinweis, nicht als Garantie.

import BackgroundTasks
func scheduleRefresh() {
    let request = BGAppRefreshTaskRequest(
        identifier: "com.example.app.refresh")
    request.earliestBeginDate = Date(
        timeIntervalSinceNow: 15 * 60)
    try? BGTaskScheduler.shared.submit(request)
}

Immer neu planen

Eine übermittelte Anfrage wird höchstens einmal ausgeführt. Damit die Aktualisierung fortgesetzt wird, muss Ihr Handler die nächste Anfrage übermitteln, bevor er beendet wird. Planen Sie sie zuerst neu und führen Sie danach die Arbeit aus, damit ein Absturz während der Arbeit den Zyklus nicht unterbricht.

import BackgroundTasks
func handleRefresh(_ task: BGAppRefreshTask) {
    scheduleRefresh() // queue the next run first
    // ... then perform this run's work
}

Den Abschluss melden

Nach Abschluss müssen Sie task.setTaskCompleted(success:) aufrufen. Wenn Sie dies vergessen, verschwenden Sie Ihr Hintergrundzeitbudget, und künftige Aufgaben können nachrangig behandelt werden. Übergeben Sie, ob die Arbeit erfolgreich war, damit das System die Planung anpassen kann.

import BackgroundTasks
func handleRefresh(_ task: BGAppRefreshTask) {
    scheduleRefresh()
    Task {
        let ok = await fetchLatest()
        task.setTaskCompleted(success: ok)
    }
}
func fetchLatest() async -> Bool { true }

Den Ablauf-Handler berücksichtigen

Das System kann die verfügbare Zeit vorzeitig zurücknehmen. Setzen Sie task.expirationHandler, um laufende Arbeiten abzubrechen und aufzuräumen, damit Sie sich bei einer vorzeitigen Beendigung sauber beenden. Betrachten Sie ihn als Alarm für eine bevorstehende Frist.

import BackgroundTasks
func handle(_ task: BGAppRefreshTask) {
    let work = Task { await fetchLatest() }
    task.expirationHandler = {
        work.cancel() // stop before the OS suspends us
    }
}
func fetchLatest() async -> Bool { true }

Verarbeitungstasks mit Voraussetzungen

Für aufwendige Arbeiten können Sie mit BGProcessingTaskRequest requiresNetworkConnectivity und requiresExternalPower festlegen. Das System wartet auf diese Bedingungen, sodass lange Aufgaben ausgeführt werden, während das Gerät nachts über WLAN geladen wird.

import BackgroundTasks
func scheduleCleanup() {
    let req = BGProcessingTaskRequest(
        identifier: "com.example.app.cleanup")
    req.requiresExternalPower = true
    req.requiresNetworkConnectivity = false
    try? BGTaskScheduler.shared.submit(req)
}

Im Debugger testen

Sie müssen nicht stundenlang warten, bis das System die Aufgabe plant. Halten Sie die Ausführung im Debugger an und führen Sie einen LLDB-Befehl aus, um eine registrierte Aufgabe sofort zu starten und den Handler vollständig zu überprüfen.

// In LLDB while paused:
// e -l objc -- (void)[[BGTaskScheduler sharedScheduler]
//   _simulateLaunchForTaskWithIdentifier:
//   @"com.example.app.refresh"]
let test = "force-launch task via LLDB"
_ = test

Ein vollständiger Aktualisierungszyklus

Alles zusammengefasst: Registrieren Sie die Aufgabe beim Start, übermitteln Sie sie beim Wechsel in den Hintergrund und planen Sie sie im Handler neu, sichern Sie sie mit einem Ablauf-Handler ab, führen Sie die asynchrone Arbeit aus und melden Sie den Abschluss.

import BackgroundTasks
func handleRefresh(_ task: BGAppRefreshTask) {
    scheduleRefresh()
    let work = Task { await fetchLatest() }
    task.expirationHandler = { work.cancel() }
    Task {
        let ok = await work.value
        task.setTaskCompleted(success: ok)
    }
}
func fetchLatest() async -> Bool { true }

Kurzer Test

Rufen Sie sich den Lebenszyklus einer wiederkehrenden Aktualisierungsaufgabe ins Gedächtnis.

Zusammenfassung

Sie haben die Hintergrundplanung kennengelernt:

  • BGAppRefreshTask für kurze Aktualisierungen und BGProcessingTask für lange Wartungsaufgaben mit Anforderungen an Stromversorgung oder Netzwerk.
  • Deklarieren Sie Bezeichner in Info.plist, registrieren Sie Handler beim Start mit register und übermitteln Sie Anfragen mit einem earliestBeginDate.
  • Planen Sie den nächsten Lauf im Handler neu, setzen Sie einen expirationHandler und rufen Sie immer setTaskCompleted auf.
  • Starten Sie Aufgaben zum Testen über LLDB zwangsweise.

Häufig gestellte Fragen

Ist die Lektion „Hintergrundaufgaben und Aktualisierung“ kostenlos?

Ja — der vollständige Text von „Hintergrundaufgaben und Aktualisierung“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Hintergrundaufgaben und Aktualisierung“?

Planen Sie Hintergrundarbeit mit BGTaskScheduler. Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Swift Academy zu starten?

Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „Hintergrundaufgaben und Aktualisierung“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?

Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Für Push-Benachrichtigungen registrieren
  2. Notification-Payloads verarbeiten
  3. Hintergrundaufgaben und Aktualisierung
  4. Benachrichtigungsaktionen und -kategorien
← Zurück zu Swift Academy