View in English

  • Global Nav Open Menu Global Nav Close Menu
  • Apple Developer
Search
Cancel
  • Apple Developer
  • News
  • Discover
  • Design
  • Develop
  • Distribute
  • Support
  • Account
Only search within “”

Quick Links

5 Quick Links

Videos

Abrir menú Cerrar menú
  • Colecciones
  • Temas
  • Todos los videos
  • Información

Volver a WWDC25

  • Información
  • Resumen
  • Transcripción
  • Código
  • 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

    • Background Tasks
    • Performing long-running tasks on iOS and iPadOS
      • Video HD
      • Video SD
  • Buscar este video…

    Hola, soy Ryan, ingeniero de software en Apple. Hablaré sobre cómo tu app puede usar la ejecución en segundo plano.

    App Store alberga millones de apps y cada una de ellas aporta algo único. Tu app brilla más cuando está al frente y en el centro. Con cada pixel a tu disposición, puedes crear experiencias memorables.

    Y la gente busca esto: apps rápidas, útiles y bien hechas por desarrolladores como tú. ¿Pero qué sucede cuando la app pasa a segundo plano?

    Hablaré de la ejecución en segundo plano y de crear un kit de herramientas que se adapte a tu app. Uno que sea eficiente y se comporte correctamente. No se trata sólo de mantenerse vivo. Se trata de ser útil, hacer cosas como prefetching, sincronizar y cargar, garantizando el éxito de tu app la próxima vez que se inicie. La ejecución en segundo plano puede hacer que tu app sea rápida, fluida y mágica.

    Hablaré sobre el significado de primer y segundo plano, y compartiré algunos principios sobre cómo el sistema decide cuándo y con qué frecuencia ejecutar apps en segundo plano.

    Luego cubriré los medios existentes para hacerlo, incluida una nueva API para reanudar tareas que se iniciaron en primer plano.

    Cada app en primer plano sigue el mismo ritmo.

    La app en sí y todo lo que necesita (recursos, estructuras y más) se cargan en la memoria. En este estado, la interfaz de tu app es el foco del dispositivo y la app se define como en primer plano.

    Cuando alguien abandona la app, pero el proceso sigue activo, pasa a segundo plano. Las apps en segundo plano se suspenden. No obtienen tiempo CPU. Esto protege la vida útil de la batería, preserva la privacidad y libera recursos para otras apps.

    La app puede usar tiempo en segundo plano para finalizar el trabajo en progreso antes de suspenderse. Cuando alguien vuelve a tu app con el selector de apps, el sistema la reanuda mientras pasa al primer plano.

    Antes de empezar a usar el tiempo de ejecución en segundo plano, será útil comprender cómo el sistema prioriza y gestiona los recursos y qué puedes hacer en tu app para crear la mejor experiencia..

    Los objetivos básicos del sistema son claros: cuidar la batería, mejorar el rendimiento, y preservar una experiencia fluida. Es decir, no se asegura la ejecución en segundo plano. En cambio, es oportunista, discrecional y estrictamente gestionada. Las cargas de trabajo entienden este contexto y trabajan con el sistema, no contra él.

    La restricción más básica es la energía.

    Cada operación, incluso el uso de Neural Engine, tiene un costo de batería asociado. La duración de la batería es un recurso finito. Y para preservarlo, el sistema fusiona el trabajo cuando se activan los dispositivos y reduce la actividad en segundo plano innecesaria. La ejecución en segundo plano es limitada: piensa en lo que tu app debería hacer en segundo plano como tareas discretas. Cada tarea hace una cosa de forma eficiente y está atenta a las prioridades y limitaciones del sistema. Este trabajo en segundo plano se refleja en Configuración de batería, que indica qué apps afectan más la duración de la batería. iOS 26 brinda información increíble sobre el rendimiento de la batería, con desgloses detallados por app.

    Tu mejor jugada aquí es ser eficiente. Si no es necesario ejecutar una tarea de inmediato, espera hasta cargar el dispositivo. Y si es necesario, que sea sencilla y tenga un propósito definido.

    Además de la batería, el sistema también gestiona otros recursos compartidos, como la memoria, el tiempo CPU y el ancho de banda de la red. Cuando alguien usa su dispositivo, se prioriza la app en primer plano. Si una app en segundo plano consume demasiada memoria o CPU, es ineficiente. Pero también compite con las de primer plano. Aquí es cuando el sistema puede intervenir y limitar, suspender o terminar procesos demasiado costosos.

    La conclusión es simple. Minimiza las tareas en segundo plano. Evita el trabajo pesado y usa el procesamiento por lotes.

    Incluso si las cargas de trabajo funcionan bien, no sabes si se ejecutarán por mucho tiempo. La cola de trabajo en segundo plano nunca está vacía. El sistema podría priorizar otras cargas. Dicho esto, todos trabajamos en equipo y el sistema hace su trabajo de maximizar la experiencia en primer plano.

    Tus cargas de trabajo deben ser resilientes. Guarda el progreso con frecuencia. Responde a las señales de vencimiento y confía en que el sistema volverá a tu carga de trabajo. Valora los procesos cooperativos y usa esos comportamientos para cambiar la programación. Pero al final del día, quien usa el dispositivo tiene la última palabra. Lo hacen activando opciones como el modo Ahorrar Batería, la Actualización en 2o. plano y Ahorrar datos. El sistema ofrece transparencia y permite a las personas decidir por sí mismas. Por ejemplo, podrían tomar medidas si tu app consume demasiada batería en segundo plano, no siempre a tu favor.

    Entonces, el trabajo en segundo plano debe ser cortés, sencillo y respetar las preferencias, y garantizar que tu impacto sea proporcional al valor que estás brindando. Ahora, incluso cuando todos los procesos del sistema adoptan estos principios, siguen funcionando en un entorno complejo y muy dinámico.

    Factores como la actividad del dispositivo, el estado térmico y el nivel de la batería se usan para fundamentar las decisiones de programación.

    Por suerte, el sistema conoce estas condiciones difíciles y ofrece la mejor experiencia en todo momento. Esto significa que incluso las tareas bien diseñadas pueden posponerse si las condiciones no son las adecuadas, optimizando el panorama general. Debes mantener la adaptabilidad. Mantén tu trabajo atómico y sencillo mientras publicitas claramente tus requisitos. Diseñar las cargas de trabajo para que retomen donde se dejaron permite que haya un progreso incremental, mientras aumentan las posibilidades de ejecución. Cuanto más comprendas y te adaptes a las condiciones y prioridades del sistema, más exitosas serán tus cargas.

    Eficiente, minimalista, resiliente, cortés y adaptable. Son las claves para crear trabajo en segundo plano que se integre fácil a la plataforma. Puede ser útil plantearse algunas preguntas clave durante el desarrollo.

    ¿Quién inició la tarea? ¿La tarea se inició explícitamente o es algo discrecional que podría ejecutarse luego?

    ¿Cuánto tiempo durará? Intenta clasificar las tareas en duraciones cortas, medianas y largas. ¿Es clave para el estado y originalidad de la app? Las descargas en segundo plano le dan más vida a tu app, pero las cargas de telemetría no benefician de inmediato al propietario del dispositivo. ¿La tarea requiere consentimiento o participación?

    La ejecución en segundo plano no es apropiada para este tipo de carga. Recomendaría adoptar otro enfoque si ese es el caso. Con estos principios en mente, veamos cómo diseñar tareas de manera efectiva. iOS ofrece varias API que te permiten solicitar tiempo de ejecución en segundo plano, y cada una asume un tipo o perfil distinto según el soporte del trabajo. Esto permite que el sistema ajuste el tiempo de ejecución de la app a los límites y condiciones que mencioné. La gente espera que las apps que usa con frecuencia siempre tengan el mejor y más reciente contenido. Tiene sentido que el sistema entienda los patrones de uso de las apps y optimice las tareas en segundo plano.

    Esto es así para la primera API, BGAppRefreshTask.

    Las apps pueden usar esto para obtener contenido de los servidores con discreción momentos antes de su uso, y adoptar la idea de cortesía. El sistema alinea las tareas con el historial de uso de la app. Las apps usadas con frecuencia tienen más posibilidades de ser programadas, lo que garantiza contenido nuevo con cada lanzamiento.

    Para crear una tarea de actualización en SwiftUI, agrega BackgroundTask a una escena. Cuando el sistema activa la app en segundo plano, invocará esta clausura y suspenderá la app cuando se devuelva la clausura.

    Estas tareas cubren casos de uso basados en búsqueda, pero puede que también quieras mantener documentos remotos que se actualizan cada tanto. Las notificaciones push en segundo plano son una solución elegante. Cuando tu servidor notifica sobre contenido nuevo, el sistema activará tu app en el momento oportuno para buscarlo. Esto no es igual a la actualización de la app. Aquí, lo que ocurre es que se envía una actualización al dispositivo.

    Como las notificaciones push en segundo plano se usan para indicar contenido remoto nuevo, se consideran discrecionales.

    También se envían con baja prioridad y se fusionan para minimizar costos.

    Y cuando alguien elimina tu app del selector, el sistema respeta su intención. Las notificaciones no se envían a tu app hasta que se inicia nuevamente.

    A veces, sin embargo, puede que quieras que tu app realice otras tareas. Quizá quieras ejecutar un modelo de ML en datos generados o gestionar el mantenimiento de la base de datos.

    La API BGProcessingTask te permite hacer justo eso.

    Registrarse para esta tarea es sencillo. Necesitas un identificador de tareas, una fila de devolución y una clausura que se invoque al momento de ejecución.

    Debes registrar BackgroundTasks de inmediato durante el inicio. Así, el sistema se entera rápidamente de tu tarea si se inicia en segundo plano e invoca su controlador inmediatamente. Las tareas de procesamiento admiten más configuraciones en pos de los principios que mencioné. Si el trabajo no es muy sensible a la latencia, una tarea grande puede elegir ejecutarse solo cuando el dispositivo esté cargando y conectado a la red. Se minimiza el impacto en la batería y reduce el consumo de la app y la configuración de la batería. Hablé de las API que permiten a tu app obtener tiempo de ejecución para tareas iniciadas en segundo plano. Pero es posible que solo quieras más tiempo para seguir con la ejecución mientras pasa a segundo plano. Las API de inicio y finalización de tareas en segundo plano permiten que tu app finalice un trabajo que podría ser irrecuperable si se interrumpe.

    Por ejemplo, un simple guardado de estado. Según el trabajo, la finalización temprana puede generar una mala experiencia.

    Envolver el código con estas llamadas a la API le dice al sistema que la app está haciendo un trabajo que no debe interrumpirse. La API es ideal para limpiar controladores de archivos o cerrar conexiones de bases de datos.

    El panorama del soporte en segundo plano está diseñado para gestionar una variedad de tareas, incluso las iniciadas por el usuario. Garantizar que las operaciones iniciadas por el usuario se completen con éxito es clave para obtener una buena experiencia. En iPadOS y iOS 26, la tarea de procesamiento continuo de fondo permite que tu app admita estas funcionalidades. Te permite seguir trabajando incluso cuando la app pase a segundo plano, con una IU para comunicar el progreso. Toma como ejemplo la app Diario. Usa la tarea para exportar en segundo plano con actualizaciones de progreso que se reflejan en el iniciador. Y una vez que se completa, el sistema se actualiza y cierra automáticamente la IU. La gente sigue en control. Pueden ver el progreso y cancelar el trabajo en cualquier momento con funcionalidades complejas.

    Las tareas de procesamiento continuo comienzan con una acción explícita que alguien realiza en la app, como tocar un botón. Cada tarea representa un objetivo claro e inmediato que alguien quiere que tu app realice, como exportar un archivo, publicar contenido en redes sociales o completar una actualización. Estas tareas suponen un progreso medible y es fácil entender lo que significa una vez finalizada la tarea.

    Las personas no esperan que las tareas se inicien automáticamente. Incluso si configuraron una preferencia en tu app antes. Evita cargas automáticas, como mantenimiento o copias de seguridad. Si una tarea se inicia sin una acción explícita, puede que la gente no entienda su objetivo o lo que significa su progreso. Este trabajo inesperado puede hacer que se cancele la tarea de tu app. Para esto, considera otras API que se adapten mejor.

    Con esto en mente, adoptar tareas de procesamiento continuo es muy sencillo. Primero, agrega un identificador a tu Info.plist. Con él, registrarás un controlador de lanzamiento que gestiona informes de estado y progreso. Luego envía una solicitud de tarea cuando se te pida. Empecemos con el identificador. Agrega un valor al conjunto de identificadores del programador de tareas en segundo plano permitido en Info.plist que tenga el ID del paquete de tu app como prefijo.

    Las tareas de procesamiento continuo también admiten una nueva notación comodín con un sufijo dinámico.

    Los identificadores comodín empiezan con el ID del paquete con un contexto semántico. El nuevo componente aquí es el punto asterisco, que indica que se agregará un sufijo dinámico al identificador en el registro y el envío.

    Un identificador compuesto usado para registrar y enviar, toma forma así.

    Por ahora, quedémonos con algo más estático.

    Con esto seleccionado, el programador debe saber qué código ejecutar cuando se inicia tu tarea de procesamiento. Se invoca una clausura proporcionada al programador luego de enviar una solicitud de tarea. Pero aquí hay un cambio. No hace falta registrar los controladores antes de que la app termine de iniciarse. En su lugar, registrarás estos controladores cuando se exprese la intención de usarlos.

    Como en Diario, debes proporcionar actualizaciones del progreso de la carga de trabajo. Si el progreso es más lento de lo esperado, el sistema avisará al iniciador y le preguntará si desea que el trabajo continúe. El sistema usa estas actualizaciones para gestionar el trabajo en curso. Como consecuencia, las tareas que no reporten progreso caducarán, lo que le permite al sistema recuperar y redistribuir los recursos. Tu app comunica estas actualizaciones con el protocolo de informes de progreso. Mientras tanto, el sistema las monitorea y muestra el progreso en la IU. Aún debemos tener en cuenta que puede que el sistema deba detener tu tarea antes si las condiciones cambian. Para manejar esto, tu tarea debe proporcionar un controlador que se llamará cuando esto ocurra. El controlador es tu oportunidad de cambiar una variable para que la tarea pueda detenerse sin realizar trabajo adicional.

    Cuando la tarea complete su trabajo, debe llamar a setTaskCompleted. Esto le dice al sistema que terminaste. Expliqué cómo manejar actualizaciones de progreso e interrupciones y cómo marcar la finalización de tareas en ejecución. Ahora, crearemos y enviaremos una solicitud de tarea válida iniciada por el usuario.

    Primero inicia un objeto de solicitud de tarea. Necesitas un identificador que coincida con uno de tu Info.plist, un título localizado y un subtítulo localizado. Esto ve el usuario en la IU del sistema.

    Ahora, proporciona una estrategia de envío para que el sistema la respete. De forma predeterminada, si el sistema no puede ejecutar de inmediato la tarea de procesamiento, pasará al final de la fila. No hace falta especificar nada más para esto. Sin embargo, a veces la fila no es la mejor opción. ¿Y si la tarea sólo es útil si se inicia ahora? En su lugar, puedes pedir al sistema que rechace el envío si no puede iniciarla de inmediato. Esto le da a tu app una respuesta instantánea que te permite manejar la situación.

    Una vez que hayas decidido tu estrategia y configurado la solicitud, envíala al programador y deja que el sistema gestione la carga de trabajo. Ese es el proceso base al trabajar con tareas de procesamiento continuo. Al proporcionar el título y el subtítulo y considerar la estrategia de envío, te integras sin problemas con el sistema y respetas el principio del consentimiento. La API ofrece más capacidades de las que se ven a simple vista. En iPadOS y iOS 26, tus tareas de procesamiento pueden beneficiarse del acceso al GPU en segundo plano en dispositivos compatibles.

    Para esto, agrega la capacidad del GPU en segundo plano en la configuración del proyecto Xcode.

    Una vez agregada, puedes y deberías consultar la propiedad de recursos admitidos del programador. Esto permite que la app comprenda qué admite el dispositivo actual en tiempo de ejecución para que adaptes los requisitos de la tarea. Esta comprobación es importante. El sistema hace cumplir estos requisitos. Las solicitudes de recursos no disponibles serán rechazadas al momento del envío, lo que mantendrá saludables al sistema y tu tarea.

    Recuerda el contexto general de las prioridades del sistema. iOS prioriza la experiencia en primer plano, o sea que la tarea en segundo plano puede recibir una calidad de servicio menor. Pero el sistema es inteligente en este sentido. Cuando tu app regrese al primer plano, aumentará la prioridad de tus tareas para que todo funcione sin problemas. Estas API ofrecen las capacidades de ejecución en segundo plano más potentes hasta ahora, sumando BGContinuedProcessingTask al kit de herramientas. Ahora que comprendes estas tareas y cómo encajan en el sistema más general, estás listo para comenzar a adoptarlas. Ya queremos ver cómo usarás estas herramientas para crear experiencias en segundo plano más eficientes. Gracias por acompañarnos.

    • 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.

Developer Footer

  • Videos
  • WWDC25
  • Terminar tareas en segundo plano
  • Open Menu Close Menu
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • Icon Composer
    • SF Symbols
    Open Menu Close Menu
    • Accessibility
    • Accessories
    • App Store
    • Audio & Video
    • Augmented Reality
    • Business
    • Design
    • Distribution
    • Education
    • Fonts
    • Games
    • Health & Fitness
    • In-App Purchase
    • Localization
    • Maps & Location
    • Machine Learning & AI
    • Open Source
    • Security
    • Safari & Web
    Open Menu Close Menu
    • Documentation
    • Sample Code
    • Tutorials
    • Downloads
    • Forums
    • Videos
    Open Menu Close Menu
    • Support Articles
    • Contact Us
    • Bug Reporting
    • System Status
    Open Menu Close Menu
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles
    • Feedback Assistant
    Open Menu Close Menu
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program
    • News Partner Program
    • Video Partner Program
    • Security Bounty Program
    • Security Research Device Program
    Open Menu Close Menu
    • Meet with Apple
    • Apple Developer Centers
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Academies
    • WWDC
    Get the Apple Developer app.
    Copyright © 2025 Apple Inc. All rights reserved.
    Terms of Use Privacy Policy Agreements and Guidelines