Achtergrondtaken en verversen
Plan werk op de achtergrond met BGTaskScheduler.
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 / networkTaak-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"
_ = idsEen 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"
_ = testEen 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:
BGAppRefreshTaskvoor korte vernieuwingen enBGProcessingTaskvoor lang onderhoud met vereisten voor stroom of netwerk.- Declareer identificatiecodes in Info.plist, registreer afhandelaars bij het opstarten met
registeren dien verzoeken in met eenearliestBeginDate. - Plan de volgende uitvoering opnieuw in de afhandelaar, stel een
expirationHandlerin en roep altijdsetTaskCompletedaan. - Start taken geforceerd via LLDB om te testen.
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
- Registreren voor pushnotificaties
- Notificatiepayloads verwerken
- Achtergrondtaken en verversen
- Notificatieacties en -categorieën