Background Execution é um mecanismo que permite executar código de um aplicativo móvel quando ele não está em primeiro plano. Sem esse mecanismo, o sistema suspende o aplicativo ao minimizá-lo. De acordo com a Apple, 2026, o iOS limita o tempo em segundo plano a 30 segundos, enquanto o Android oferece cenários mais flexíveis através do WorkManager e Foreground Service.
Principais Pontos
Background Execution é a capacidade de um aplicativo continuar executando código após o usuário tê-lo minimizado ou alternado para outro aplicativo. Sem mecanismos especiais, o SO móvel coloca o aplicativo no estado Suspenso (Suspended) poucos segundos depois de ir para segundo plano, liberando CPU e memória para aplicativos ativos.
Um aplicativo móvel passa por vários estados do ciclo de vida: Foreground (ativo), Background (em segundo plano), Suspended (suspenso) e Terminated (encerrado). Background é o único estado em que o aplicativo pode executar código sem uma interface visível. iOS e Android definem a duração e as operações disponíveis neste estado de forma diferente.
A execução em segundo plano é necessária para sincronização de dados, download de conteúdo, processamento de notificações Push, geolocalização em segundo plano e reprodução de áudio. A sincronização é o cenário mais comum: o aplicativo envia dados ao servidor ou baixa atualizações sem intervenção do usuário.
As limitações da execução em segundo plano são devidas a três fatores: consumo de energia, desempenho do dispositivo e privacidade do usuário. A CPU e os módulos de rádio (Wi-Fi, dados celulares) consomem mais energia — cada processo em segundo plano reduz a vida útil da bateria.
Estudos do Google mostram que aplicativos que executam tarefas em segundo plano a cada 5 minutos reduzem a vida útil da bateria do dispositivo em 20–30% ao dia. Mesmo operações otimizadas em segundo plano com frequência de uma vez por hora têm um impacto notável se houver mais de dois desses aplicativos.
Cada aplicativo em segundo plano ocupa RAM. Com falta de RAM, o sistema descarrega aplicativos da memória, causando uma reinicialização quando o usuário retorna. iOS usa o algoritmo Jetsam — um mecanismo de encerramento forçado de processos em segundo plano quando o limite de memória é excedido. O Android usa LMK (Low Memory Killer) com princípio semelhante.
A partir do Android 10 e iOS 13, o sistema exige que os aplicativos declarem o propósito do trabalho em segundo plano. O Android introduziu restrições à execução de Broadcast Receivers em segundo plano. O iOS exige especificar o Background Mode nas Capabilities do projeto. O usuário pode desativar a execução em segundo plano para qualquer aplicativo nas configurações.
| SO | Versão | Restrição | Impacto |
|---|---|---|---|
| Android | 8.0 | IMPLICIT_BROADCAST proibido | 67% dos Broadcasts em segundo plano quebrados |
| Android | 9.0 | Doze melhorado | Chamadas de rede restritas |
| Android | 12+ | Foreground Service restrito | Inicialização em segundo plano proibida |
| iOS | 7+ | Background App Refresh | Janelas de atualização periódicas |
| iOS | 13+ | BGTaskScheduler | Agendamento em vez de execução |
O Android fornece vários mecanismos para execução em segundo plano, cada um resolvendo uma categoria diferente de tarefas. WorkManager é a API recomendada para tarefas adiadas e periódicas. Foreground Service é para execução imediata com uma notificação visível. JobScheduler é uma alternativa de baixo nível ao WorkManager.
WorkManager faz parte do Android Jetpack, fornecendo execução de tarefas em segundo plano com garantia de conclusão mesmo após reinicialização do dispositivo. A API escolhe o momento ideal de execução considerando o estado da rede, nível da bateria e modo Doze. WorkManager é compatível com API 14+ e substitui os obsoletos AlarmManager e JobScheduler.
Quando um aplicativo precisa executar uma tarefa visível ao usuário (reprodução de música, gravação de geolocalização), usa-se Foreground Service. O serviço mostra uma notificação persistente na barra de status e tem prioridade mais alta — o sistema não o encerrará até a tarefa terminar. A partir do Android 13, é necessária a permissão POST_NOTIFICATIONS.
A partir do Android 6.0, o dispositivo entra em modo Doze quando ocioso. Neste modo, operações de rede, sincronização e JobScheduler são adiadas. WorkManager se adapta automaticamente ao Doze — as tarefas são executadas durante a próxima Maintenance Window quando o dispositivo acorda do sono para manutenção.
O iOS usa uma abordagem mais rigorosa para execução em segundo plano. Background App Refresh é o mecanismo principal para atualização periódica de dados. BGTaskScheduler é a API para agendar tarefas com base no estado do sistema. Para operações prolongadas, Background Modes estão disponíveis: audio, location, voip, fetch e processing.
Background App Refresh permite que o aplicativo acorde a cada 15–30 minutos para sincronizar dados. O tempo de ativação depende do comportamento do usuário — o sistema analisa com que frequência ele abre o aplicativo. Os usuários podem desativar esse recurso para aplicativos individuais em Ajustes — Geral — Background App Refresh.
A partir do iOS 13, o BGTaskScheduler substituiu os obsoletos performFetch e beginBackgroundTask. O aplicativo registra tarefas com um identificador e intervalo mínimo, e o sistema determina o momento ideal de execução. As tarefas são divididas em dois tipos: BGProcessingTask (longas, 10+ minutos) e BGAppRefreshTask (curtas, até 30 segundos).
O iOS aloca tempo limitado para execução de tarefas em segundo plano — até 30 segundos para BGAppRefreshTask e até 10 minutos para BGProcessingTask. Quando o limite é excedido, o sistema encerra a tarefa à força. O desenvolvedor deve chamar o manipulador de expiração (expiration handler) para salvar resultados intermediários.
Vamos ver uma implementação prática da execução em segundo plano no Android usando WorkManager. Um exemplo de sincronização de dados a cada 8 horas com conhecimento do estado da rede. WorkManager garante a execução da tarefa mesmo após reinicialização do dispositivo.
class SyncWorker(context: Context, params: WorkerParameters) : Worker(context, params) {
override fun doWork(): Result {
return try {
syncDataToServer()
Log.d("Sync", "Dados sincronizados")
Result.success()
} catch (e: Exception) {
Result.retry()
}
}
}
// Executar tarefa periódica a cada 8 horas
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.setRequiresCharging(false)
.build()
val syncRequest = PeriodicWorkRequestBuilder<SyncWorker>(
8, TimeUnit.HOURS
).setConstraints(constraints).build()
WorkManager.getInstance(context).enqueue(syncRequest)
Para operações prolongadas visíveis ao usuário, use Foreground Service. Um exemplo de download de arquivo com progresso na notificação. O serviço chama startForeground() com uma notificação que não pode ser descartada. Quando o download é concluído — stopForeground(STOP_FOREGROUND_REMOVE).
class DownloadService : Service() {
override fun onStartCommand(intent: Intent?, flags: Int, id: Int): Int {
startForeground(NOTIFICATION_ID, createNotification())
downloadFile()
stopForeground(STOP_FOREGROUND_REMOVE)
stopSelf()
return START_NOT_STICKY
}
private fun createNotification(): Notification {
return NotificationCompat.Builder(this, CHANNEL_ID)
.setContentTitle("Baixar arquivo")
.setSmallIcon(android.R.drawable.ic_download)
.build()
}
}
No iOS, a execução em segundo plano é configurada através do BGTaskScheduler. Um exemplo de registro e execução de uma tarefa de atualização de conteúdo. O aplicativo deve registrar o identificador da tarefa no Info.plist e chamar submit quando a tarefa deve ser agendada.
import BackgroundTasks
func registerBackgroundTask() {
BGTaskScheduler.shared.register(
forTaskWithIdentifier: "com.app.refresh",
using: nil
) { task in
self.handleAppRefresh(task: task as! BGAppRefreshTask)
}
}
func scheduleAppRefresh() {
let request = BGAppRefreshTaskRequest(
identifier: "com.app.refresh"
)
request.earliestBeginDate = Date(timeIntervalSinceNow: 15 * 60)
try? BGTaskScheduler.shared.submit(request)
}
func handleAppRefresh(task: BGAppRefreshTask) {
scheduleAppRefresh()
task.expirationHandler = {
// Salvar dados intermediários
cacheCurrentState()
}
fetchLatestData {
task.setTaskCompleted(success: true)
}
}
Para operações prolongadas (limpeza de cache, processamento de dados), use BGProcessingTask. O sistema concede até 10 minutos para execução. Só é executado quando o dispositivo está carregando e conectado ao Wi-Fi. Requer um identificador separado no Info.plist e registro via register(forTaskWithIdentifier:).
func scheduleProcessing() {
let request = BGProcessingTaskRequest(
identifier: "com.app.cleanup"
)
request.requiresExternalPower = true
request.requiresNetworkConnectivity = true
request.earliestBeginDate = Date(timeIntervalSinceNow: 24 * 60 * 60)
try? BGTaskScheduler.shared.submit(request)
}
Android e iOS diferem fundamentalmente em sua filosofia de execução em segundo plano. Android oferece ferramentas flexíveis com maior controle, mas exige que o desenvolvedor escolha a API correta. iOS limita as capacidades, mas garante desempenho estável e autonomia para o usuário.
| Critério | Android | iOS |
|---|---|---|
| API recomendada | WorkManager | BGTaskScheduler |
| Tempo máximo de tarefa | Ilimitado (Foreground Service) | 30 s / 10 min (processing) |
| Tarefas periódicas | Sim, via PeriodicWorkRequest | Sim, via BGAppRefreshTask |
| Garantia de execução | Sim, mesmo após reinicialização | Não — o sistema decide quando |
| Acesso à rede em segundo plano | Limitado pelo modo Doze | Via URLSession com background config |
| Geolocalização em segundo plano | Foreground Service + permissão | Background Mode location + NSLocation |
| Áudio em segundo plano | Foreground Service com notificação de mídia | Background Mode audio + AVAudioSession |
WorkManager é ideal para tarefas que devem ser concluídas independentemente do estado do aplicativo: sincronização de dados, envio de análises, processamento de filas. A API garante execução mesmo após desligar o dispositivo — a tarefa é reagendada após a inicialização.
BGTaskScheduler é adequado para tarefas que o sistema pode realizar em qualquer momento conveniente: baixar novo conteúdo, atualizar widgets, limpar cache. Não é adequado para operações urgentes — o sistema atrasa a tarefa se o dispositivo estiver em Doze ou com pouca bateria.
Perguntas Frequentes
Background Execution é um conceito geral que descreve qualquer código executado em segundo plano. Background Modes é um mecanismo específico do iOS que permite a um aplicativo realizar certos tipos de operações em segundo plano: áudio, geolocalização, VoIP, fetch. O Android usa uma abordagem semelhante através de tipos de Foreground Service.
No iOS, este é o limite padrão para BGAppRefreshTask. O sistema encerra à força a tarefa quando o limite é atingido. No Android, uma situação semelhante ocorre quando o aplicativo não usa WorkManager ou Foreground Service — um Service comum é encerrado pelo sistema após ir para segundo plano.
No Android, use WorkManager — ele garante execução mesmo após reinicialização. No iOS, a execução não pode ser garantida — o sistema decide quando executar a tarefa. A única maneira de garantir a execução é usar Background Modes (audio, location) com um indicador visível para o usuário.
No iOS, chame UIApplication.shared.backgroundRefreshStatus — status .available, .denied ou .restricted. No Android, use PowerManager.isIgnoringBatteryOptimizations() para verificar isenção de otimização de bateria. Para WorkManager, nenhuma verificação é necessária — a API lida com as restrições do sistema por si só.
Notificações Push são o mecanismo principal para acionar ações sem código em segundo plano. No iOS, PushKit está disponível para VoIP e Silent Push para atualização de dados. No Android — High Priority FCM e Notification Trampoline. WebSockets através de Foreground Service é uma alternativa para aplicativos em tempo real.
Resumo
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.
Leia também