Swift Academy · Les

Achtergrondtaken en verversen

Plan werk op de achtergrond met BGTaskScheduler.

Les 3 van 413 stappen

Achtergrondtaken en verversen is een gratis Swift Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Swift Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Swift Academy bevat in totaal 4 lessen.

Waarom achtergrondtaken bestaan

iOS schort apps agressief op om batterij te besparen. Om zinvol werk te doen terwijl de app op de achtergrond staat — bijvoorbeeld een overzicht vernieuwen of een download verwerken — plan je dit via BGTaskScheduler. Het systeem bepaalt wanneer de taak wordt uitgevoerd en weegt je behoeften af tegen het stroomverbruik en gebruikspatronen.

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

Twee typen taken

Er zijn twee typen: BGAppRefreshTask voor korte, frequente updates (seconden) en BGProcessingTask voor langer, zwaarder werk (minuten), zoals databaseonderhoud, waarbij je optioneel stroom of een netwerkverbinding kunt vereisen.

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

Taak-id's declareren

Elke taak heeft een unieke identificatiecode nodig die je in Info.plist vermeldt onder BGTaskSchedulerPermittedIdentifiers. Zonder deze declaratie mislukt de registratie. Gebruik tekenreeksen in reverse-DNS-stijl.

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

Een afhandelaar registreren

Registreer bij het opstarten een afhandelaar voor elke identificatiecode met BGTaskScheduler.shared.register. Dit moet gebeuren voordat de app klaar is met opstarten. De afhandelaar wordt uitgevoerd wanneer het systeem later besluit de taak te starten.

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

Een verzoek indienen

Registreren koppelt alleen de afhandelaar. Om daadwerkelijk om uitvoering te vragen, maak je een BGAppRefreshTaskRequest, stel je de vroegste begindatum in en dien je het verzoek in met submit. Het systeem beschouwt de datum als een aanwijzing, niet als een garantie.

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

Altijd opnieuw inplannen

Een ingediend verzoek wordt hoogstens één keer uitgevoerd. Om te blijven vernieuwen, moet je afhandelaar het volgende verzoek indienen voordat de huidige uitvoering klaar is. Plan eerst opnieuw in en voer daarna het werk uit, zodat een crash tijdens het werk de cyclus niet stopt.

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

Voltooiing doorgeven

Je moet task.setTaskCompleted(success:) aanroepen wanneer je klaar bent. Als je dat vergeet, verspil je je budget voor achtergrondwerk en kunnen toekomstige taken een lagere prioriteit krijgen. Geef door of het werk is geslaagd, zodat het systeem de planning kan aanpassen.

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

De afloopafhandelaar respecteren

Het systeem kan de beschikbare tijd eerder terugnemen. Stel task.expirationHandler in om lopend werk te annuleren en op te ruimen, zodat je netjes afsluit als de uitvoering wordt afgebroken. Behandel het als een alarm voor een tijdslimiet.

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 }

Verwerkingstaken met vereisten

Voor zwaar werk kun je met BGProcessingTaskRequest requiresNetworkConnectivity en requiresExternalPower instellen. Het systeem wacht tot aan die voorwaarden is voldaan, zodat lange taken 's nachts worden uitgevoerd terwijl het apparaat via wifi wordt opgeladen.

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

Testen in de debugger

Je gaat niet uren wachten tot het systeem een taak inplant. Pauzeer in de debugger en voer een LLDB-opdracht uit om een geregistreerde taak onmiddellijk te starten, zodat je de afhandelaar van begin tot eind kunt controleren.

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

Een volledige vernieuwingscyclus

Alles samen: registreer bij het opstarten, dien in wanneer de app naar de achtergrond gaat en plan in de afhandelaar opnieuw in, beveilig die met een afloopafhandelaar, voer asynchroon werk uit en geef de voltooiing door.

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 }

Korte controle

Haal je de levenscyclus van een terugkerende vernieuwingstaak voor de geest.

Samenvatting

Je hebt geleerd hoe achtergrondplanning werkt:

  • BGAppRefreshTask voor korte vernieuwingen en BGProcessingTask voor lang onderhoud met vereisten voor stroom of netwerk.
  • Declareer identificatiecodes in Info.plist, registreer afhandelaars bij het opstarten met register en dien verzoeken in met een earliestBeginDate.
  • Plan de volgende uitvoering opnieuw in de afhandelaar, stel een expirationHandler in en roep altijd setTaskCompleted aan.
  • Start taken geforceerd via LLDB om te testen.
Gratis beginnen

Leer Swift met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
122
Lessen
409

Veelgestelde vragen

Is de les “Achtergrondtaken en verversen” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Swift Academy, waaronder “Achtergrondtaken en verversen”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Swift Academy bevat in totaal 4 lessen.

Wat leer ik in “Achtergrondtaken en verversen”?

Plan werk op de achtergrond met BGTaskScheduler. Je oefent met Swift Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Swift Academy te beginnen?

Ervaring vooraf is niet nodig. Swift Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “Achtergrondtaken en verversen”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Swift Academy?

Ja. Elke les over Swift Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Registreren voor pushnotificaties
  2. Notificatiepayloads verwerken
  3. Achtergrondtaken en verversen
  4. Notificatieacties en -categorieën
← Terug naar Swift Academy