Foreground Service: o que é, tipos e mecanismo de funcionamento

Autor: IT Sectr Publicado: 2026-03-28 Tempo de leitura: 11 min

Foreground Service é um serviço Android que realiza operações de longa duração visíveis ao usuário com uma notificação obrigatória na barra de status. Ao contrário do Background Service, que o sistema pode interromper quando faltam recursos, o Foreground Service recebe alta prioridade e continua funcionando mesmo em condições de memória limitada. De acordo com a documentação da Android Developers, 2025, o Foreground Service continua sendo a única maneira confiável de realizar tarefas de longa duração em dispositivos com Android 12 e versões posteriores.

Principais conclusões

  • Foreground Service — serviço com notificação obrigatória visível ao usuário na barra de status
  • Notification — elemento obrigatório, sem o qual o sistema não permitirá iniciar o serviço
  • Prioridade — Foreground Service não é interrompido quando a memória está baixa, ao contrário do Background Service
  • Android 12+ — foram introduzidas restrições para iniciar foreground service em background
  • Foreground Service Type — declaração obrigatória do tipo de serviço para API alvo 34+

O que é Foreground Service

Foreground Service é um componente Android projetado para realizar operações que o usuário conhece e vê. Ele exibe uma notificação persistente no painel de notificações que não pode ser dispensada — permanece ativa enquanto o serviço estiver em execução. Esta é a principal diferença de um serviço em segundo plano, que opera despercebido pelo usuário.

O sistema Android trata o Foreground Service como um processo criticamente importante. Quando a RAM está baixa, a plataforma primeiro encerra os Background Services, depois as Activities em cache, e apenas em casos excepcionais — o Foreground Service. O OOM Killer atribui a esse serviço um nível ADJ 2, o que praticamente elimina seu encerramento forçado.

Para iniciar um Foreground Service, o desenvolvedor deve chamar o método startForeground() dentro de alguns segundos após a criação do serviço, caso contrário o sistema gerará uma exceção ForegroundServiceDidNotStartInTimeException. Este é um requisito estrito da plataforma introduzido para evitar tarefas em segundo plano não declaradas.

Histórico

O mecanismo Foreground Service foi introduzido no Android 1.0 com o primeiro SDK, mas a notificação obrigatória apareceu no Android 9 (API 28). Antes disso, um serviço podia ser executado em primeiro plano sem um indicador visível ao usuário. A partir do Android 9, o Google endureceu os requisitos: qualquer aplicação que chame startForeground deve fornecer uma notificação em 5 segundos após o início do serviço.

No Android 12 (API 31), foram adicionadas restrições para iniciar o Foreground Service a partir de um contexto em segundo plano — agora a permissão FOREGROUND_SERVICE_SPECIAL_USE é necessária para muitos cenários. O Android 14 (API 34) introduziu a declaração obrigatória de foregroundServiceType no manifesto, tornando a arquitetura de serviços mais transparente e previsível.

Como funciona o Foreground Service

O mecanismo de funcionamento do Foreground Service baseia-se em três etapas principais: criação do serviço, vinculação da notificação e execução da tarefa. O serviço herda da classe Service e sobrescreve o método onStartCommand(), no qual startForeground() é chamado com um identificador e um objeto Notification.

Após chamar startForeground(), o sistema move o processo do serviço para o grupo de primeiro plano com prioridade de sobrevivência aumentada. Isso significa que o Android tentará manter o processo em execução independentemente da carga de RAM. O Foreground Service não pode ser interrompido pelo sistema em condições normais — apenas pelo usuário ao dispensar a notificação ou chamando explicitamente stopSelf().

O ciclo de vida do Foreground Service é gerenciado através dos métodos onCreate(), onStartCommand() e onDestroy(). Em onStartCommand(), o desenvolvedor define a estratégia de reinicialização após a eliminação do processo — a constante START_STICKY obriga o sistema a recriar o serviço após a recuperação de recursos, enquanto START_NOT_STICKY impede a reinicialização automática.

Ciclo de vida e estados

Ao iniciar o Foreground Service, as etapas são executadas sequencialmente: chamada a startService(), criação do objeto Service em onCreate(), processamento do Intent em onStartCommand() e chamada a startForeground() com um objeto Notification. Se o serviço já estiver em execução e um novo Intent chegar, apenas onStartCommand() é chamado novamente — onCreate() é executado apenas uma vez durante a vida do serviço.

A parada do Foreground Service ocorre através de stopForeground() com o sinalizador REMOVE_NOTIFICATION, que oculta a notificação da barra de status. Imediatamente após remover a notificação, o sistema pode parar de considerar o serviço como em primeiro plano e reduzir sua prioridade para Background Service, tornando o processo vulnerável ao encerramento.

Interação com PowerManager

PowerManager desempenha um papel importante na operação do Foreground Service, pois os modos de economia de energia do Android (Doze, App Standby) podem limitar sua capacidade de executar tarefas. Mesmo em status de primeiro plano, o serviço está sujeito às políticas de bateria — solicitações de rede podem ser adiadas e temporizadores sincronizados com janelas Doze. Para operações de longa duração tolerantes a atrasos, recomenda-se usar Foreground Service em combinação com WorkManager.

Principais tipos de Foreground Service

A partir do Android 14 (API 34), o Google introduziu a declaração obrigatória do tipo de Foreground Service no manifesto. Cada tipo define um cenário de uso permitido — o sistema verifica a conformidade entre o tipo declarado e o comportamento real do serviço. Existem 9 tipos no total, mas os mais usados são os seguintes.

dataSync

O tipo dataSync é projetado para sincronização de dados entre dispositivo e servidor, transferência de arquivos e backups. Exemplos incluem upload de fotos para armazenamento em nuvem, sincronização de banco de dados com Firebase ou upload de logs para servidor remoto. Este tipo exige especificar a justificativa no manifesto através do atributo android:foregroundServiceType="dataSync".

mediaPlayback

O tipo mediaPlayback é usado para reproduzir áudio e vídeo em segundo plano — players de música, clientes de podcast, players de vídeo. É o único tipo que pode funcionar indefinidamente sem intervenção do usuário. O canal de notificação deve ter alta prioridade e exibir controles de reprodução — botões de play, pausa, próximo, anterior via MediaStyle.

location

O tipo location é destinado a serviços de geolocalização — aplicativos de navegação, rastreamento de atividade, geofencing. Para Android 14+, é necessário declarar a permissão FOREGROUND_SERVICE_LOCATION e especificar o tipo no manifesto. O aplicativo deve ter uma permissão de localização ativa em tempo de execução, caso contrário o sistema rejeitará a inicialização do serviço.

TipoPermissãoExemplo de uso
dataSyncFOREGROUND_SERVICE_DATA_SYNCSincronização de arquivos com a nuvem
mediaPlaybackFOREGROUND_SERVICE_MEDIA_PLAYBACKPlayer de música em segundo plano
locationFOREGROUND_SERVICE_LOCATIONNavegador GPS ao dirigir
cameraFOREGROUND_SERVICE_CAMERAAplicativo de vigilância por vídeo
connectedDeviceFOREGROUND_SERVICE_CONNECTED_DEVICETrabalho com dispositivo BLE

Foreground Service vs Background Service

A diferença chave entre Foreground e Background Service é a presença de uma notificação visível e a prioridade de sobrevivência. O Background Service pode ser interrompido pelo sistema a qualquer momento quando a memória está baixa, enquanto o Foreground Service continua funcionando graças ao elevado nível adj do processo no mecanismo Low Memory Killer do Android.

O Background Service não requer notificação e pode ser executado despercebido pelo usuário. No entanto, a partir do Android 8 (API 26), o Google restringiu significativamente os serviços em segundo plano: startService() a partir de um contexto em segundo plano não funciona mais, e Context.startForegroundService() tornou-se obrigatório para iniciar qualquer serviço que pretenda passar para primeiro plano. O sistema também introduziu Limites de Execução em Segundo Plano — um temporizador (atualmente 10 minutos) após o qual o Background Service é parado forçadamente.

O Foreground Service, por outro lado, não tem limite de tempo. O serviço pode funcionar por horas ou dias — até que o usuário o pare explicitamente ou reinicie o dispositivo. Isso torna o Foreground Service a escolha ideal para aplicativos que necessitam de trabalho contínuo em segundo plano: players de música, rastreadores de atividade, aplicativos de chamadas VoIP.

Tabela comparativa

ParâmetroForeground ServiceBackground Service
NotificaçãoObrigatóriaNão necessária
Tempo de vidaSem limiteAté 10 minutos (API 26+)
Prioridade do sistemaAlta (ADJ 2)Baixa (ADJ 8+)
Início API 26+startForegroundService()Proibido em background

Requisitos no Android 12+

A partir do Android 12 (API 31), o Google introduziu restrições significativas para iniciar o Foreground Service. A principal mudança é a proibição de chamar startForegroundService() a partir de um contexto em segundo plano para a maioria dos tipos de serviço. As exceções aplicam-se apenas quando o usuário consentiu explicitamente (por exemplo, através da permissão FOREGROUND_SERVICE_SPECIAL_USE) ou quando o serviço é iniciado em resposta à intenção de transmissão BOOT_COMPLETED.

O manifesto do aplicativo com API alvo 34+ deve conter um bloco foregroundServiceType para cada serviço declarado. Por exemplo, para um serviço de sincronização de dados, especifique android:foregroundServiceType="dataSync". Se o tipo não for especificado, o sistema considera o serviço inválido e lança uma exceção MissingForegroundServiceTypeException ao tentar iniciá-lo. O Google Play também verifica a conformidade dos tipos e pode rejeitar a publicação em caso de incompatibilidade.

Permissões para Android 14+

No Android 14 (API 34), cada tipo de Foreground Service tem uma permissão correspondente. O desenvolvedor deve declará-las no manifesto e solicitá-las em tempo de execução antes de iniciar o serviço. Para dataSync, é necessário FOREGROUND_SERVICE_DATA_SYNC; para mediaPlayback, FOREGROUND_SERVICE_MEDIA_PLAYBACK. O usuário pode revogar a permissão nas configurações, o que interromperá o serviço ativo.

O Google também introduziu o mecanismo Foreground Service Notification Timeout no Android 14: se o serviço não chamar startForeground() dentro de 10 segundos após a criação, o sistema gera uma exceção. Esse endurecimento visa combater aplicativos que atrasam ou pulam a chamada de notificação, funcionando efetivamente como Background Service disfarçado de primeiro plano.

Casos de uso do Foreground Service

Foreground Service é usado em uma ampla gama de tarefas que exigem execução garantida em segundo plano. Os cenários mais comuns incluem reprodução de mídia, rastreamento de geolocalização, sincronização de dados e trabalho com dispositivos periféricos. Vamos analisar cada um deles em detalhe.

Players de música e streaming de áudio

Um exemplo clássico é um player de música que continua a reprodução após minimizar o aplicativo. O serviço inicia com uma Notificação MediaStyle, botões de controle e usa o tipo mediaPlayback. O usuário vê informações da faixa na barra de status e pode controlar a reprodução sem abrir o aplicativo.

Rastreadores GPS e navegação

Aplicativos de navegação usam Foreground Service do tipo location para rastreamento contínuo de coordenadas. O serviço exibe uma notificação com a velocidade atual, tempo de viagem e um botão para parar o rastreamento. Sem o Foreground Service, o sistema pararia de receber coordenadas em segundo plano após alguns minutos, tornando a navegação impossível.

Chamadas VoIP

Clientes VoIP — aplicativos de chamadas de voz e vídeo — usam Foreground Service para manter uma conexão ativa. O serviço do tipo phoneCall (desde Android 14) garante que uma chamada não caia ao minimizar o aplicativo. A notificação exibe a duração da chamada e controles de microfone e alto-falante.

  • Players de música — streaming de áudio, podcasts, players de vídeo com fundo
  • Navegação — rastreamento GPS, geofencing, navegadores para dirigir
  • Chamadas VoIP — Skype, Zoom, Telegram — manter chamada ativa
  • Rastreadores de fitness — contagem de passos, monitoramento cardíaco, treinos
  • Sincronização — upload de fotos, backup de dados, atualização de conteúdo off-line

Criando Foreground Service em Kotlin

Vamos criar um Foreground Service em Kotlin para sincronização de dados. O serviço será iniciado a partir de uma Activity, exibirá uma notificação com progresso e terminará corretamente após a conclusão. O exemplo demonstra todos os elementos obrigatórios: declaração no manifesto, canal de notificação, chamada startForeground() e tratamento de foregroundServiceType.

kotlin
class SyncService : Service() {

    companion object {
        const val CHANNEL_ID = "sync_channel"
        const val NOTIFICATION_ID = 1001
    }

    override fun onCreate() {
        super.onCreate()
        createNotificationChannel()
    }

    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        val notification = buildNotification()
        startForeground(NOTIFICATION_ID, notification)
        performSync()
        return START_STICKY
    }

    private fun createNotificationChannel() {
        val channel = NotificationChannel(
            CHANNEL_ID,
            "Sincronização",
            NotificationManager.IMPORTANCE_LOW
        ).apply {
            description = "Canal de sincronização de dados"
        }
        val manager = getSystemService(NotificationManager::class.java)
        manager.createNotificationChannel(channel)
    }

    private fun buildNotification(): Notification {
        return NotificationCompat.Builder(this, CHANNEL_ID)
            .setContentTitle("Sincronização")
            .setContentText("Upload de dados para o servidor")
            .setSmallIcon(R.drawable.ic_sync)
            .setOngoing(true)
            .build()
    }

    private fun performSync() {
        GlobalScope.launch(Dispatchers.IO) {
            // Emulação de sincronização
            delay(5000)
            stopForeground(Service.STOP_FOREGROUND_REMOVE)
            stopSelf()
        }
    }

    override fun onBind(intent: Intent): IBinder? = null
}

Declaração do serviço no manifesto

Para o serviço funcionar corretamente no Android 12+, é necessário declarar o Foreground Service no AndroidManifest.xml especificando o tipo e as permissões necessárias. O atributo foregroundServiceType é obrigatório para API alvo 34+, e as permissões FOREGROUND_SERVICE_DATA_SYNC e POST_NOTIFICATIONS devem ser solicitadas em tempo de execução.

xml
<!-- AndroidManifest.xml -->
<uses-permission
    android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission
    android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
<uses-permission
    android:name="android.permission.POST_NOTIFICATIONS" />

<application ...>
    <service
        android:name=".SyncService"
        android:foregroundServiceType="dataSync"
        android:exported="false" />
</application>

Limitações e alternativas

Apesar de sua alta confiabilidade, o Foreground Service tem limitações. A principal é a visibilidade para o usuário. O aplicativo não pode realizar tarefas longas em segundo plano sem uma notificação, o que nem sempre é aceitável do ponto de vista da UX. Além disso, o sistema pode parar forçadamente até mesmo um Foreground Service quando o limite de tempo para alguns tipos é excedido — por exemplo, dataSync é limitado a várias horas de operação.

Uma alternativa ao Foreground Service é o WorkManager, uma biblioteca Android Jetpack para tarefas em segundo plano adiadas. O WorkManager garante a execução da tarefa mesmo após a reinicialização do dispositivo e suporta cadeias de tarefas, operações periódicas e restrições de rede e bateria. Para a maioria das operações em segundo plano, o Google recomenda o WorkManager em vez de um serviço direto.

JobScheduler é uma API Android integrada para agendar tarefas. É adequado para operações que podem ser adiadas: sincronização por Wi-Fi, download de dados ao conectar ao carregador. O JobScheduler agrupa tarefas em janelas para economizar bateria, ao contrário do Foreground Service que funciona continuamente independentemente do estado de economia de energia.

Para tarefas curtas (até 10–15 segundos), pode-se usar CoroutineWorker do WorkManager com execução atrasada. Se uma tarefa deve ser executada estritamente em um horário específico, usa-se AlarmManager junto com BroadcastReceiver. Assim, o Foreground Service é uma solução para operações contínuas de longa duração, não uma ferramenta universal para todos os cenários em segundo plano.

  • WorkManager — para tarefas adiadas e garantidas com suporte a reinicialização
  • JobScheduler — para agendar tarefas considerando estado da rede e bateria
  • AlarmManager — para executar tarefas em horário exato
  • CoroutineWorker — para operações curtas em segundo plano com suporte a corrotinas

Perguntas frequentes

O que é Foreground Service no Android?

Foreground Service é um serviço Android com uma notificação persistente na barra de status que realiza tarefas de longa duração visíveis ao usuário. Tem alta prioridade de sobrevivência e não é interrompido pelo sistema quando a memória está baixa, ao contrário do Background Service.

Como o Foreground Service difere do Background Service?

Foreground Service exibe uma notificação obrigatória, não tem limite de tempo e é protegido contra interrupção pelo sistema. Background Service é invisível para o usuário, funciona por até 10 minutos (API 26+) e pode ser interrompido pelo Low Memory Killer a qualquer momento.

Quais tipos de Foreground Service existem no Android 14?

O Android 14 define 9 tipos: dataSync, mediaPlayback, location, camera, connectedDevice, phoneCall, microphone, health e remoteMessaging. Cada tipo requer uma permissão correspondente e declaração no manifesto através do atributo foregroundServiceType.

O que acontece se startForeground não for chamado a tempo?

Se o serviço não chamar startForeground() dentro de 10 segundos após a criação (Android 14), o sistema lança uma exceção ForegroundServiceDidNotStartInTimeException e interrompe forçadamente o serviço. O aplicativo também receberá um ANR (Application Not Responding) se a operação estiver sendo executada na thread principal.

É possível ocultar a notificação do Foreground Service?

Não, ocultar a notificação do Foreground Service programaticamente é impossível. A partir do Android 9 (API 28), a notificação é obrigatória e não pode ser dispensada pelo usuário. A única maneira de removê-la é parar o serviço chamando stopForeground(REMOVE_NOTIFICATION) e stopSelf().

Resumo

  • Foreground Service — serviço Android com notificação obrigatória visível ao usuário na barra de status
  • Prioridade — Foreground Service praticamente nunca é interrompido pelo sistema (ADJ 2), ao contrário do Background Service (ADJ 8+)
  • Tipos — Android 14 exige declaração do tipo (dataSync, mediaPlayback, location, etc.) e permissões correspondentes
  • Restrições — inicialização em background proibida no Android 12+; FOREGROUND_SERVICE_SPECIAL_USE necessário para alguns cenários
  • Alternativas — WorkManager para tarefas adiadas, JobScheduler para agendamento, AlarmManager para horário exato
  • Código — elementos obrigatórios: NotificationChannel, startForeground(), foregroundServiceType no manifesto
  • Google Play — a publicação do aplicativo exige conformidade entre o tipo declarado e o uso real do serviço

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