-
Conclua tarefas em segundo plano
Descubra os avanços na execução em segundo plano e entenda como o sistema programa o tempo de execução. Abordaremos como aproveitar ao máximo o tempo de execução em segundo plano para permitir que seu app ofereça recursos em segundo plano enquanto mantém uma ótima experiência em primeiro plano. Também vamos explicar como as APIs oferecem suporte ao tempo de execução em segundo plano para seu app e como cada API é adequada para diferentes casos de uso, incluindo as novas APIs do iOS e do iPadOS 26, que permitem que seu app conclua tarefas durante a transição do primeiro para o segundo plano.
Capítulos
- 0:00 - Apresentação
- 1:22 - Introdução
- 2:09 - Comportamentos e restrições
- 7:29 - APIs de tarefas em segundo plano
- 11:23 - Tarefas de processamento contínuo
Recursos
-
Buscar neste vídeo...
-
-
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 - Apresentação
Saiba como os apps podem usar o tempo de execução em segundo plano para executar tarefas como pré-busca e sincronização no seu app.
- 1:22 - Introdução
Os apps são carregados na memória, ficam em primeiro plano e passam a ser o foco principal. Quando o usuário sai de um app, esse app vai para segundo plano e o sistema o suspende a fim de economizar bateria e recursos. Talvez o app precise de um tempo curto para concluir as tarefas. Ao retornar, ele é retomado para o primeiro plano.
- 2:09 - Comportamentos e restrições
No iOS e no iPadOS, o tempo de execução em segundo plano é gerenciado com rigor para priorizar a duração da bateria e otimizar o desempenho. A execução em segundo plano é oportunista e opcional, e a energia é a restrição mais fundamental. Você deve projetar as tarefas em segundo plano do seu app para que sejam eficientes, leves e orientadas por objetivos. O sistema une o trabalho e pode limitar, suspender ou encerrar os processos que apresentam alto consumo de recursos. Mantenha o mínimo de trabalho em segundo plano, adie as tarefas que não são essenciais até o carregamento e garanta o caráter atômico e resiliente das tarefas. Os apps devem ser cordiais, respeitando as preferências das pessoas e as condições do sistema. O sistema oferece transparência aos usuários, permitindo que eles influenciem as decisões de programação. O sucesso das cargas de trabalho em segundo plano depende da adaptabilidade e do alinhamento delas às prioridades do sistema.
- 7:29 - APIs de tarefas em segundo plano
O iOS e o iPadOS oferecem várias APIs para projetar tarefas executadas em segundo plano. O sistema otimiza essas tarefas com base nos padrões de uso do app e nas restrições do dispositivo. “BGAppRefreshTask” permite que os apps busquem conteúdo de forma silenciosa antes do uso, e os apps usados com mais frequência recebem programação mais frequente. As notificações por push em segundo plano ativam o app para que busque conteúdo novo quando o servidor envia uma notificação, mas essas notificações são consideradas opcionais e de baixa prioridade a fim de minimizar a sobrecarga. “BGProcessingTask” possibilita que os apps executem trabalhos mais complexos, como a execução de modelos de ML ou a manutenção de bancos de dados. Essa tarefa precisa ser registrada durante a inicialização, e é possível configurá-la para ser executada apenas quando o dispositivo estiver em um carregador e conectado a uma rede. As APIs beginBackgroundTask e endBackgroundTask oferecem mais tempo para que os apps concluam trabalhos cruciais, como salvar o estado ou encerrar conexões, ao fazer a transição para o segundo plano.
- 11:23 - Tarefas de processamento contínuo
No iPadOS e no iOS 26, há uma nova API BGContinuedProcessingTask que permite que os apps concluam as tarefas iniciadas por alguém em primeiro plano, mesmo depois de terem sido colocados em segundo plano. Esse recurso aprimora a experiência ao permitir que o app conclua tarefas complexas sem que esteja aberto. Por exemplo, o app Diário usa essa API para exportar arquivos em segundo plano. Alguém inicia a exportação com um toque de botão, e o app apresenta atualizações de progresso por meio da UI do sistema. O usuário pode monitorar o progresso e cancelar a tarefa a qualquer momento, mantendo controle total. Essas tarefas sempre precisam começar com uma ação explícita, como um toque de botão ou um gesto. Elas representam objetivos claros e imediatos, como exportar arquivos, publicar conteúdo nas redes sociais ou concluir atualizações em acessórios conectados. O sistema espera que essas tarefas tenham um progresso mensurável. É necessário registrar um manipulador de inicialização para gerenciar o estado e os relatórios de progresso. Apresente atualizações oportunas sobre o progresso da carga de trabalho usando o protocolo de relatório de progresso. Se o progresso da tarefa estiver mais lento do que o esperado, o sistema solicitará que a pessoa decida se deve continuar. Quando a tarefa for concluída, será necessário informar o sistema usando o método “setTaskCompleted”. Além disso, o app deve lidar com possíveis interrupções de forma elegante, fornecendo um manipulador de expiração. A API também concede acesso à GPU em segundo plano nos dispositivos compatíveis, possibilitando que você crie experiências mais avançadas e eficientes em segundo plano. No entanto, lembre-se de que o iOS prioriza a experiência em primeiro plano, e as tarefas em segundo plano podem receber uma qualidade de serviço inferior. Mesmo assim, o sistema aumenta de forma inteligente a prioridade da tarefa quando o app retorna ao primeiro plano.