-
Terminez les tâches d’arrière-plan
Découvrez les avancées en matière d'exécution en arrière-plan et comprenez comment le système planifie l'exécution. Nous verrons comment tirer le meilleur parti de l'exécution en arrière-plan pour permettre à votre app de fournir des fonctionnalités en arrière-plan, tout en garantissant une excellente expérience de premier plan. Nous verrons également comment les API fournissent un environnement d'exécution en arrière-plan pour votre app, et comment chaque API est adaptée à différents cas d'utilisation — y compris les nouvelles API d'iOS et d'iPadOS 26 qui permettent à votre app de terminer certaines tâches lors de sa transition du premier plan vers l'arrière-plan.
Chapitres
- 0:00 - Bienvenue
- 1:22 - Introduction
- 2:09 - Comportements et contraintes
- 7:29 - API de tâches d’arrière-plan
- 11:23 - Tâches de traitement continu
Ressources
-
Rechercher dans cette vidéo…
-
-
8:27 - Register an app refresh task
import BackgroundTasks import SwiftUI @main struct ColorFeed: App { var body: some Scene { WindowGroup { // ... } .backgroundTask(.appRefresh("com.colorfeed.wwdc25.appRefresh")) { await self.handleAppRefreshTask() } } } -
9:45 - Register a processing task
import BackgroundTasks import UIKit class AppDelegate: UIResponder, UIApplicationDelegate { func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { BGTaskScheduler.shared.register( forTaskWithIdentifier: "com.example.apple-samplecode.ColorFeed.db_cleaning", using: nil ) { task in self.handleAppRefresh(task: task as! BGProcessingTask) } } func submitProcessingTaskRequest() { let request = BGProcessingTaskRequest( identifier: "com.example.apple-samplecode.ColorFeed.db_cleaning" ) request.requiresNetworkConnectivity = true request.requiresExternalPower = true BGTaskScheduler.shared.submit(request)! } } -
10:51 - Begin and end background task
import UIKit @main class AppDelegate: UIResponder, UIApplicationDelegate { var backgroundTaskID: UIBackgroundTaskIdentifier = .invalid func saveState() { /* ... */ } func handlePersistence() { let app = UIApplication.shared guard backgroundTaskID != .invalid else { return } backgroundTaskID = app.beginBackgroundTask(withName: "Finish Export") { app.endBackgroundTask(self.backgroundTaskID) self.backgroundTaskID = .invalid } self.saveState() app.endBackgroundTask(backgroundTaskID) backgroundTaskID = .invalid } } -
14:00 - Continued processing task registration
import BackgroundTasks func handleDialogConfirmation() { BGTaskScheduler.shared.register("com.colorfeed.wwdc25.userTask") { task in let task = task as! BGContinuedProcessingTask var shouldContinue = true task.expirationHandler = { shouldContinue = false } task.progress.totalUnitCount = 100 task.progress.completedUnitCount = 0 while shouldContinue { // Do some work task.progress.completedUnitCount += 1 } task.setTaskCompleted(success: true) } } -
15:47 - Continued processing task submission
import BackgroundTasks func submitContinuedProcessingTaskRequest() { let request = BGContinuedProcessingTaskRequest( identifier: "com.colorfeed.wwdc25.userTask", title: "A succinct title", subtitle: "A useful and informative subtitle" ) request.strategy = .fail BGTaskScheduler.shared.submit(request)! }
-
-
- 0:00 - Bienvenue
Découvrez comment les apps peuvent utiliser l’environnement d’exécution en arrière-plan pour effectuer des tâches telles que la prélecture et la synchronisation dans votre app.
- 1:22 - Introduction
Les apps se chargent en mémoire, passent au premier plan et sont au centre de l’attention. Lorsqu’un utilisateur quitte une app, celle-ci passe en arrière-plan et le système l’interrompt pour économiser la batterie et les ressources. L’application peut demander un bref délai pour terminer les tâches. Au retour, elle revient au premier plan.
- 2:09 - Comportements et contraintes
Dans iOS et iPadOS, l’exécution en arrière-plan est étroitement gérée afin de prioriser l’autonomie de la batterie et d’optimiser les performances. L’exécution en arrière-plan est opportuniste et discrétionnaire, l’énergie étant la contrainte la plus fondamentale. Vous devez concevoir les tâches d’arrière-plan de votre app pour qu’elles soient efficaces, légères et ciblées. Le système regroupe les tâches et peut limiter, suspendre ou arrêter les processus qui consomment trop de ressources. Veillez à ce que le travail en arrière-plan reste minimal, reportez les tâches non essentielles jusqu’au chargement et assurez-vous que les tâches sont atomiques et résilientes. Les apps doivent être courtoises et respecter les préférences des utilisateurs et les conditions du système. Le système offre de la transparence aux utilisateurs, ce qui leur permet d’influer sur les décisions de planification. Le succès des charges de travail en arrière-plan dépend de leur adaptabilité et de leur alignement avec les priorités du système.
- 7:29 - API de tâches d’arrière-plan
iOS et iPadOS proposent différentes API pour la conception des tâches exécutées en arrière-plan. Le système optimise ces tâches en fonction des modèles d’utilisation des apps et des contraintes de l’appareil. 'BGAppRefreshTask' permet aux applications de récupérer silencieusement du contenu avant utilisation. Les applications fréquemment utilisées reçoivent une planification plus fréquente. Les notifications push en arrière-plan réveillent l’application pour récupérer le nouveau contenu lorsque le serveur envoie une notification, mais elles sont considérées comme discrétionnaires et peu prioritaires afin de minimiser la surcharge. 'BGProcessingTask' permet aux applications d’effectuer des tâches plus complexes, comme l’exécution de modèles ML ou la maintenance de bases de données. Cette tâche doit être enregistrée au lancement. Vous pouvez la configurer pour qu’elle ne s’exécute que lorsque l’appareil est sur un chargeur et connecté à un réseau. Les API beginBackgroundTask et endBackgroundTask donnent aux apps plus de temps pour effectuer des tâches cruciales, telles que l’enregistrement de l’état ou la fermeture de connexions, lors du passage en arrière-plan.
- 11:23 - Tâches de traitement continu
Dans iPadOS et iOS 26, une nouvelle API BGContinuedProcessingTask permet aux apps d’effectuer des tâches commencées par un utilisateur au premier plan même après avoir été placées en arrière-plan. Cette fonctionnalité améliore l’expérience en permettant à l’app d’effectuer des tâches complexes sans avoir besoin de l’ouvrir. Par exemple, l’app Journal utilise cette API pour exporter des fichiers en arrière-plan. Un utilisateur lance l’exportation en appuyant sur un bouton, et l’app fournit ensuite des mises à jour de progression via l’interface utilisateur du système. L’utilisateur peut suivre la progression et annuler la tâche à tout moment, en gardant un contrôle total. Ces tâches doivent toujours commencer par une action explicite, telle qu’une pression sur un bouton ou un geste. Elles représentent des objectifs clairs et immédiats, comme exporter des fichiers, publier du contenu sur les réseaux sociaux ou effectuer des mises à jour sur des accessoires connectés. Le système s’attend à ce que ces tâches fassent des progrès mesurables. Vous devez enregistrer un gestionnaire de lancement pour gérer le suivi de l’état et de la progression. Fournissez des mises à jour opportunes sur la progression de la charge de travail à l’aide du protocole de suivi de la progression. Si la progression de la tâche est plus lente que prévu, le système invite l’utilisateur à décider de continuer ou non. Une fois la tâche terminée, vous devez informer le système à l’aide de la méthode 'setTaskCompleted'. En outre, l’app doit gérer les interruptions potentielles de manière élégante en fournissant un gestionnaire d’expiration. L’API prend également en charge l’accès au GPU en arrière-plan sur les appareils pris en charge, ce qui vous permet de créer des expériences d’arrière-plan plus puissantes et plus efficaces. Cependant, n’oubliez pas qu’iOS donne la priorité à l’expérience au premier plan et que les tâches d’arrière-plan peuvent recevoir une qualité de service inférieure. Néanmoins, le système augmente intelligemment la priorité des tâches lorsque l’application revient au premier plan.