Attività e aggiornamento in background
Pianifichi il lavoro in background con BGTaskScheduler.
Attività e aggiornamento in background è una lezione Swift Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Swift Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Swift Academy include 4 lezioni in totale.
Perché esistono le attività in background
iOS sospende in modo aggressivo le app per risparmiare batteria. Per eseguire operazioni significative mentre l'app è in background — aggiornare un feed o elaborare un download — le pianifichi tramite BGTaskScheduler. Il sistema decide quando eseguirle, bilanciando le Sue esigenze con il consumo energetico e le modalità d'uso.
import BackgroundTasks
// You request work; the system schedules it later
// at an opportune moment (charging, on Wi-Fi, etc.)Due tipi di attività
Esistono due tipi: BGAppRefreshTask per aggiornamenti brevi e frequenti (della durata di pochi secondi) e BGProcessingTask per operazioni più lunghe e impegnative (della durata di minuti), come la manutenzione del database, che possono richiedere alimentazione o rete.
import BackgroundTasks
// BGAppRefreshTask -> quick content refresh
// BGProcessingTask -> long maintenance, can require
// external power / networkDichiarazione degli identificatori
Ogni attività richiede un identificatore univoco, che deve essere elencato in Info.plist sotto BGTaskSchedulerPermittedIdentifiers. Senza questa dichiarazione, la registrazione non riesce. Utilizzi stringhe in stile reverse DNS.
// Info.plist:
// BGTaskSchedulerPermittedIdentifiers = [
// "com.example.app.refresh",
// "com.example.app.cleanup"
// ]
let ids = "declare every identifier in Info.plist"
_ = idsRegistrazione di un gestore
All'avvio, registri un gestore per ogni identificatore con BGTaskScheduler.shared.register. Questa operazione deve avvenire prima che l'avvio dell'app sia completato. Il gestore viene eseguito ogni volta che il sistema decide in seguito di eseguire l'attività.
import BackgroundTasks
func registerTasks() {
BGTaskScheduler.shared.register(
forTaskWithIdentifier: "com.example.app.refresh",
using: nil) { task in
handleRefresh(task as! BGAppRefreshTask)
}
}Invio di una richiesta
La registrazione configura soltanto il gestore. Per chiedere effettivamente un'esecuzione, crei un oggetto BGAppRefreshTaskRequest, imposti la data di inizio più vicina e lo invii con submit. Il sistema considera la data un suggerimento, non una garanzia.
import BackgroundTasks
func scheduleRefresh() {
let request = BGAppRefreshTaskRequest(
identifier: "com.example.app.refresh")
request.earliestBeginDate = Date(
timeIntervalSinceNow: 15 * 60)
try? BGTaskScheduler.shared.submit(request)
}Pianificare sempre nuovamente
Una richiesta inviata viene eseguita al massimo una volta. Per continuare ad aggiornare i dati, il gestore deve inviare la richiesta successiva prima di terminare. Pianifichi prima la richiesta successiva e svolga poi il lavoro, così un arresto durante l'elaborazione non interrompe il ciclo.
import BackgroundTasks
func handleRefresh(_ task: BGAppRefreshTask) {
scheduleRefresh() // queue the next run first
// ... then perform this run's work
}Segnalare il completamento
Al termine deve chiamare task.setTaskCompleted(success:). Dimenticarsene spreca il tempo disponibile in background e può far diminuire la priorità delle attività future. Indichi se l'operazione è riuscita, così il sistema può adattare la pianificazione.
import BackgroundTasks
func handleRefresh(_ task: BGAppRefreshTask) {
scheduleRefresh()
Task {
let ok = await fetchLatest()
task.setTaskCompleted(success: ok)
}
}
func fetchLatest() async -> Bool { true }Rispettare il gestore di scadenza
Il sistema può recuperare in anticipo il tempo assegnato. Imposti task.expirationHandler per annullare le operazioni in corso e ripulire le risorse, in modo da terminare correttamente se l'esecuzione viene interrotta. Lo consideri come un allarme che segnala una scadenza.
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 }Elaborazione delle attività con requisiti
Per le operazioni pesanti, BGProcessingTaskRequest consente di impostare requiresNetworkConnectivity e requiresExternalPower. Il sistema attende che queste condizioni siano soddisfatte, così le attività lunghe possono essere eseguite mentre il dispositivo si ricarica durante la notte connesso al Wi-Fi.
import BackgroundTasks
func scheduleCleanup() {
let req = BGProcessingTaskRequest(
identifier: "com.example.app.cleanup")
req.requiresExternalPower = true
req.requiresNetworkConnectivity = false
try? BGTaskScheduler.shared.submit(req)
}Test nel debugger
Non dovrà aspettare ore perché il sistema pianifichi l'esecuzione. Metta in pausa l'app nel debugger ed esegua un comando LLDB per forzare l'avvio immediato di un'attività registrata, così potrà verificare il gestore dall'inizio alla fine.
// In LLDB while paused:
// e -l objc -- (void)[[BGTaskScheduler sharedScheduler]
// _simulateLaunchForTaskWithIdentifier:
// @"com.example.app.refresh"]
let test = "force-launch task via LLDB"
_ = testUn ciclo completo di aggiornamento
Riassumendo: registri il gestore all'avvio, invii la richiesta quando l'app passa in background e, nel gestore, pianifichi nuovamente l'attività, la protegga con un gestore di scadenza, esegua il lavoro asincrono e segnali il completamento.
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 }Verifica rapida
Ricordi il ciclo di vita di un'attività di aggiornamento ricorrente.
Riepilogo
Ha imparato a pianificare le attività in background:
BGAppRefreshTaskper aggiornamenti brevi eBGProcessingTaskper attività di manutenzione lunghe con requisiti di alimentazione o rete.- Dichiari gli identificatori in Info.plist, registri i gestori all'avvio con
registere invii le richieste consubmit, impostando unearliestBeginDate. - Pianifichi l'esecuzione successiva all'interno del gestore, imposti un
expirationHandlere chiami sempresetTaskCompleted. - Forzi l'avvio delle attività tramite LLDB per eseguire i test.
Domande Frequenti
La lezione «Attività e aggiornamento in background» è gratuita?
Sì — il testo completo di «Attività e aggiornamento in background» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Swift Academy, passa a CoddyKit PRO. Il corso Swift Academy include 4 lezioni in totale.
Cosa imparerò in «Attività e aggiornamento in background»?
Pianifichi il lavoro in background con BGTaskScheduler. Eserciti Swift Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Swift Academy?
Non è richiesta alcuna esperienza precedente. Swift Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.
Quanto tempo richiede la lezione «Attività e aggiornamento in background»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Swift Academy?
Sì. Ogni lezione Swift Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Registrazione alle notifiche push
- Gestione dei payload delle notifiche
- Attività e aggiornamento in background
- Azioni e categorie delle notifiche