-
Terminar tareas en segundo plano
Descubre los avances de la ejecución en segundo plano y comprende cómo el sistema programa el tiempo de ejecución. Analizaremos cómo aprovechar al máximo el tiempo de ejecución en segundo plano para permitir que la app ofrezca funcionalidades en segundo plano y, al mismo tiempo, mantenga una excelente experiencia en primer plano. También abarcaremos cómo las API proporcionan tiempo de ejecución en segundo plano para tu app y cómo se adapta cada API a diferentes casos de uso, incluidas las nuevas API en iOS y iPadOS 26 (que permiten que la app termine las tareas a medida que la app pasa del primer plano al segundo plano).
Capítulos
- 0:00 - Te damos la bienvenida
- 1:22 - Introducción
- 2:09 - Comportamientos y restricciones
- 7:29 - API de tareas en segundo plano
- 11:23 - Tareas de procesamiento continuo
Recursos
-
Buscar este video…
-
-
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 - Te damos la bienvenida
Descubre cómo las apps pueden usar el tiempo de ejecución en segundo plano para realizar tareas, como la precarga y la sincronización en tu app.
- 1:22 - Introducción
Las apps se cargan en la memoria, pasan a primer plano y son el foco principal. Cuando alguien abandona una app, esta pasa a segundo plano y el sistema la suspende para ahorrar batería y recursos. La app puede solicitar un tiempo breve para finalizar las tareas. Al regresar, vuelve al primer plano.
- 2:09 - Comportamientos y restricciones
En iOS y iPadOS, el tiempo de ejecución en segundo plano está estrictamente administrado para priorizar la duración de la batería y optimizar el rendimiento. La ejecución en segundo plano es puntual y selectiva, siendo la energía la restricción fundamental. Debes diseñar las tareas en segundo plano de tu app para que sean eficientes, ligeras y tengan un propósito definido. El sistema fusiona el trabajo y puede limitar, suspender o finalizar procesos que consuman demasiados recursos. Mantén el trabajo en segundo plano al mínimo, aplaza las tareas no esenciales hasta la carga, y asegúrate de que las tareas sean de naturaleza atómica y flexible. Las apps deben ser corteses, respetando las preferencias de las personas y las condiciones del sistema. El sistema proporciona transparencia a las personas, permitiéndoles influir en las decisiones de programación. El éxito de las cargas de trabajo en segundo plano depende de su capacidad de adaptación y alineación con las prioridades del sistema.
- 7:29 - API de tareas en segundo plano
iOS y iPadOS ofrecen varias API para diseñar tareas que se ejecutan en segundo plano. El sistema optimiza estas tareas según los patrones de uso de la app y las limitaciones del dispositivo. BGAppRefreshTask permite que las apps recuperen contenido de forma silenciosa antes de su uso, programando con mayor frecuencia las apps más usadas. Las notificaciones push en segundo plano activan la app para recuperar contenido nuevo cuando el servidor envía una notificación, pero se consideran discrecionales y de baja prioridad para minimizar la sobrecarga. BGProcessingTask permite que las apps realicen trabajos más complejos, como ejecutar modelos ML o mantenimiento de bases de datos. Esta tarea debe registrarse durante el inicio y puede configurarse para que se ejecute solo cuando el dispositivo esté cargándose y conectado a una red. Las API beginBackgroundTask y endBackgroundTask brindan a las apps tiempo adicional para completar trabajos cruciales, como guardar el estado o cerrar conexiones, cuando pasan al segundo plano.
- 11:23 - Tareas de procesamiento continuo
En iPadOS y iOS 26, hay una nueva API BGContinuedProcessingTask, que permite que las apps completen tareas iniciadas por alguien en primer plano incluso después de haber estado en segundo plano. Esta funcionalidad mejora la experiencia permitiendo que la app complete tareas complejas sin necesidad de estar abierta. Por ejemplo, la app Journal usa esta API para exportar archivos en segundo plano. Alguien inicia la exportación con solo tocar un botón y luego la app proporciona actualizaciones de progreso a través de la IU del sistema. La persona puede monitorear el progreso y cancelar la tarea en cualquier momento, manteniendo el control total. Estas tareas siempre deben comenzar con una acción explícita, como tocar un botón o realizar un gesto. Representan objetivos claros e inmediatos, como exportar archivos, publicar contenido en redes sociales o completar actualizaciones en accesorios conectados. El sistema espera que estas tareas realicen progresos medibles. Debes registrar un controlador de lanzamiento para administrar los informes de estado y progreso. Proporcionar actualizaciones oportunas sobre la progresión de la carga de trabajo usando el protocolo de informes de progreso. Si el progreso de la tarea es más lento de lo esperado, el sistema le pide a la persona que decida si desea continuar. Cuando se complete la tarea, deberás informárselo al sistema mediante el método setTaskCompleted. Además, la app debe administrar posibles interrupciones de manera fluida proporcionando un controlador de vencimiento. La API también admite el acceso a la GPU en segundo plano en dispositivos compatibles, lo que te permite crear experiencias en segundo plano más poderosas y eficientes. Sin embargo, recuerda que iOS prioriza la experiencia en primer plano, por lo que las tareas en segundo plano pueden recibir una menor calidad de servicio. Sin embargo, el sistema aumenta de forma inteligente la prioridad de la tarea cuando la app regresa al primer plano.