BGTaskScheduler: o que é, tarefas em segundo plano no iOS

Autor: IT Sectr Publicado: 2026-03-27 Tempo de leitura: 8 min

BGTaskScheduler é um framework da Apple para agendar e executar tarefas em segundo plano em aplicativos iOS 13 e posteriores. Ele substituiu os obsoletos Background Fetch e performFetch, fornecendo uma API unificada para trabalhar com operações em segundo plano. De acordo com Apple Developer Documentation, 2026, o framework inclui dois tipos de tarefas: BGProcessingTask para operações longas e BGAppRefreshTask para atualizações curtas de conteúdo.

Principais pontos

  • BGTaskScheduler é um framework iOS 13+ para gerenciar tarefas em segundo plano, substituindo o antigo Background Fetch.
  • BGAppRefreshTask é uma tarefa curta em segundo plano de até 30 segundos para atualizar conteúdo.
  • BGProcessingTask é uma tarefa longa em segundo plano de até vários minutos para operações intensivas.
  • O registro de tarefas é feito no Info.plist por meio de identificadores e no código via handleTasks.
  • O sistema determina automaticamente o momento ideal para iniciar as tarefas com base no comportamento do usuário.

O que é BGTaskScheduler?

BGTaskScheduler é um framework de sistema da Apple introduzido no iOS 13 que gerencia centralizadamente a execução de tarefas em segundo plano. Antes do seu surgimento, os desenvolvedores usavam UIApplication backgroundTasks, performFetch e manipulação de eventos no appDelegate, o que levava à fragmentação de código e comportamento imprevisível.

O framework funciona com base no princípio de agendamento diferido: o aplicativo registra tarefas com identificadores únicos, e o iOS determina o momento ideal para executá-las. O sistema leva em conta o nível da bateria, a atividade do usuário, o estado da rede e outros fatores.

As principais capacidades incluem trabalhar tanto com operações curtas quanto longas em segundo plano. Ao contrário do AlarmManager no Android, o BGTaskScheduler não garante um horário exato de execução — o sistema reserva-se o direito de atrasar uma tarefa se as condições não forem favoráveis.

Como o BGTaskScheduler funciona no iOS?

BGTaskScheduler usa uma arquitetura baseada em handlers. O aplicativo registra um handler para cada tipo de tarefa, e o sistema o chama quando chega o momento adequado. O framework em si não executa a tarefa diretamente — ele apenas notifica o aplicativo de que é hora de executá-la.

Processo de registro de tarefa

O registro começa declarando o identificador da tarefa no Info.plist através do array BGTaskSchedulerPermittedIdentifiers. Em seguida, no código do aplicativo, o método registerHandler(forTaskWithIdentifier:) é chamado com um closure como handler.

swift
import BackgroundTasks

let taskID = "com.example.app.refresh"

BGTaskScheduler.shared.registerHandler(
    forTaskWithIdentifier: taskID,
    using: DispatchQueue.global()
) { task in
    task.expirationHandler = {
        // chamado ao encerrar forçadamente
    }
    processBackgroundTask(task as! BGAppRefreshTask)
}

Agendamento da execução

Após o registro, o aplicativo deve solicitar explicitamente a execução da tarefa através de submitTaskRequest. A solicitação contém o identificador da tarefa e a data mais próxima possível de início. O sistema salva a solicitação e a processa quando considera as condições adequadas.

swift
let request = BGAppRefreshTaskRequest(
    identifier: taskID
)
request.earliestBeginDate = Date(timeIntervalSinceNow: 3600)

do {
    try BGTaskScheduler.shared.submit(request)
} catch {
    print("Erro de agendamento: \(error)")
}

Tipos de tarefas em segundo plano do BGTaskScheduler

BGTaskScheduler fornece dois tipos principais de tarefas, cada um projetado para seu próprio caso de uso. Escolher o tipo correto afeta diretamente a probabilidade de execução bem-sucedida da tarefa pelo sistema.

BGAppRefreshTask

BGAppRefreshTask é projetada para atualizações curtas de conteúdo em segundo plano: carregar novos dados, sincronizar com o servidor, atualizar widgets. O tempo de execução é limitado a 30 segundos, após os quais o sistema encerra a tarefa forçadamente. Este tipo de tarefa é executado com mais frequência que o BGProcessingTask e tem prioridade mais alta.

BGProcessingTask

BGProcessingTask é projetada para operações mais longas: processar arquivos de mídia, indexar Core Data, criar backups. A tarefa pode ser executada por vários minutos, mas o sistema a inicia com menos frequência e apenas em condições favoráveis — conectado à energia, Wi-Fi estável e baixa carga no dispositivo.

ParâmetroBGAppRefreshTaskBGProcessingTask
Limite de tempo30 segundosvários minutos
Frequência de inícioaltabaixa
Condiçõesqualquerenergia + Wi-Fi
Requer energianãorecomendado
Exemploatualizar feedprocessar vídeo

Registro e agendamento

O registro correto é um requisito obrigatório para o funcionamento do BGTaskScheduler. Se uma tarefa não estiver registrada no Info.plist, o sistema ignorará qualquer solicitação para executá-la.

Registro no Info.plist

O arquivo Info.plist deve incluir o array BGTaskSchedulerPermittedIdentifiers com uma lista de identificadores de string. Cada identificador deve ser único dentro do aplicativo. A Apple recomenda usar a notação reversa de domínio.

xml
<key>BGTaskSchedulerPermittedIdentifiers</key>
<array>
    <string>com.example.app.refresh</string>
    <string>com.example.app.processing</string>
</array>

Agendamento e cancelamento

Para agendar uma tarefa, use o método submitTaskRequest. Se uma tarefa não for mais necessária, ela pode ser cancelada via cancelTaskRequest ou cancelAllTaskRequests. O sistema também cancela tarefas automaticamente quando o aplicativo é excluído ou os dados são redefinidos.

Monitoramento do estado das tarefas

BGTaskScheduler oferece a capacidade de rastrear o estado das tarefas agendadas através de getPendingTaskRequests. Este método retorna uma lista de todas as solicitações ativas com informações sobre seu tipo, identificador e earliestBeginDate. Para cada solicitação, você pode verificar se ela já foi concluída ou cancelada e decidir sobre o reagendamento.

É importante notar que o sistema não fornece um callback direto sobre o sucesso de uma tarefa em segundo plano — o próprio handler deve informar o resultado através das propriedades da tarefa. setTaskCompleted permite marcar uma tarefa como concluída com sucesso, após o que o sistema pode iniciar a próxima tarefa agendada deste tipo. Se uma tarefa não chamar setTaskCompleted, o sistema a considera concluída por tempo limite ou encerramento forçado.

Para diagnóstico, recomenda-se usar OSLog no handler e visualizar os logs através do Console.app no Mac. A Apple também fornece a ferramenta MetricKit para analisar o desempenho de tarefas em segundo plano — ela coleta dados sobre tempo de execução, consumo de energia e frequência de início que podem ser usados para otimização.

swift
// Cancelar tarefa específica
BGTaskScheduler.shared.cancel(taskRequestWithIdentifier: taskID)

// Cancelar todas as tarefas
BGTaskScheduler.shared.cancelAllTaskRequests()

// Verificar tarefas agendadas
BGTaskScheduler.shared.getPendingTaskRequests { requests in
    print("Agendadas \(requests.count) tarefas")
}

Limitações e recomendações

BGTaskScheduler impõe limitações rigorosas ao trabalho em segundo plano. O sistema pode atrasar uma tarefa indefinidamente se as condições não forem favoráveis. Os desenvolvedores devem entender que o framework não é projetado para tarefas em tempo real.

As principais limitações incluem: o sistema não garante a execução da tarefa no horário especificado, o número máximo de tarefas simultâneas é limitado e o consumo de energia é estritamente controlado. Executar várias tarefas em sequência pode resultar em sua fusão ou cancelamento.

Para aumentar a probabilidade de execução, recomenda-se definir earliestBeginDate não antes de 1 hora para BGProcessingTask e 15 minutos para BGAppRefreshTask. Também é importante lidar com expirationHandler — se uma tarefa não cumprir seu limite de tempo, o sistema chama este handler para um encerramento adequado. O reagendamento deve ser feito dentro do próprio handler para manter um ciclo contínuo de trabalho em segundo plano.

Outra limitação importante diz respeito às solicitações de rede. O BGTaskScheduler não garante uma conexão de rede ativa durante a execução da tarefa. O aplicativo deve verificar independentemente a disponibilidade da rede através do NWPathMonitor e adiar o processamento se a conexão estiver ausente. Isso difere do Android JobScheduler, que pode ativar uma tarefa apenas quando conectado a um tipo específico de rede. Na prática, os desenvolvedores frequentemente combinam BGTaskScheduler com sessões URL em segundo plano do NSURLSession para carregamento confiável de dados.

Compatibilidade com macOS e watchOS

A partir do macOS Catalina, o BGTaskScheduler também está disponível no Mac. Isso permite criar tarefas em segundo plano multiplataforma para aplicativos UIKit executados no Apple Silicon. No watchOS, o framework tem funcionalidade limitada — apenas BGAppRefreshTask curtas estão disponíveis para atualizar complicações e sincronizar dados com o iPhone. Os desenvolvedores devem considerar as diferenças de plataforma ao planejar a arquitetura em segundo plano.

Ferramentas de depuração e diagnóstico

A Apple fornece várias ferramentas para depurar o BGTaskScheduler. O comando e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.example.task"] no lldb inicia forçadamente uma tarefa em segundo plano, ignorando as limitações do sistema. O Xcode possui um sinalizador Simulate Background Fetch no menu Debug que simula uma atualização curta em segundo plano. O MetricKit é usado para análise de desempenho — ele coleta informações sobre frequência de início, duração da execução e consumo de energia de cada tarefa. Esses dados ajudam a otimizar a frequência de agendamento e escolher o tipo de tarefa correto.

Na prática, o BGTaskScheduler é adequado para atualizar dados de widgets, sincronização iCloud, processar notificações push com conteúdo e indexar para busca Spotlight. Não é adequado para análises em tempo real, aplicativos de chat ou qualquer tarefa que exija execução imediata.

Recursos e documentação da Apple

Para um estudo aprofundado do BGTaskScheduler, a Apple recomenda a documentação oficial da WWDC: a sessão "Advances in Background Tasks" (2020) cobre a migração de APIs obsoletas, e "Background Tasks in Practice" (2021) contém casos de uso reais. A seção Energy Efficiency Guide também é útil, descrevendo como o framework se encaixa na estratégia geral de economia de energia da Apple. Exemplos de código estão disponíveis no repositório oficial da Apple Developer no GitHub com projetos completos para iOS e macOS.

Perguntas frequentes

Como o BGTaskScheduler difere do Background Fetch no iOS 12?

O Background Fetch era limitado a uma tarefa em segundo plano por aplicativo e não tinha mecanismo de prioridades. O BGTaskScheduler suporta múltiplas tarefas com diferentes tipos, fornece uma API unificada e gerenciamento automático de energia.

Quantas tarefas em segundo plano podem ser registradas no BGTaskScheduler?

A Apple não define um limite explícito para o número de identificadores registrados, mas na prática recomenda-se usar não mais que 5–10 tarefas. Um número maior reduz a probabilidade de cada tarefa específica ser executada devido à competição por recursos do sistema.

Como depurar a execução do BGTaskScheduler em um dispositivo real?

Para depuração, use o comando e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.example.task"] no lldb. Ele inicia forçadamente uma tarefa, ignorando as limitações do sistema. O sinalizador Xcode Simulate Background Fetch no menu Debug também está disponível.

O BGTaskScheduler pode executar uma tarefa se o aplicativo estiver fechado?

Sim, o BGTaskScheduler pode iniciar um processo mesmo se o aplicativo foi fechado forçadamente pelo usuário. No entanto, o sistema pode aplicar atrasos adicionais, e nem todos os tipos de tarefa garantem execução neste cenário.

O que acontece se uma tarefa não for concluída dentro do tempo previsto?

O sistema chama o expirationHandler, sinalizando à tarefa que ela precisa terminar. Se o aplicativo ignorar este sinal e continuar funcionando, o iOS encerra o processo forçadamente. Depois disso, o sistema pode reduzir a prioridade de todas as tarefas em segundo plano do aplicativo.

Resumo

  • BGTaskScheduler é o framework unificado da Apple para gerenciar todas as tarefas em segundo plano no iOS 13+ e macOS Catalina+.
  • Dois tipos de tarefa — BGAppRefreshTask até 30 segundos e BGProcessingTask até vários minutos — cobrem diferentes cenários de trabalho em segundo plano.
  • O registro é obrigatório em dois lugares: Info.plist (identificadores) e código (registerHandler).
  • O agendamento via submitTaskRequest com earliestBeginDate — o sistema escolhe o momento ideal de início.
  • ExpirationHandler é obrigatório para lidar com o encerramento forçado da tarefa pelo sistema.
  • As limitações incluem ausência de garantia de execução, controle de consumo de energia e dependência do estado do dispositivo.
  • Use BGTaskScheduler para atualizações de conteúdo, sincronização e indexação, mas não para tarefas em tempo real.

Vamos desenvolver um aplicativo móvel chave na mão

A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.

Discutir o projeto

Leia também