Como funciona o Alarm Manager no Android? Análise completa em Kotlin com um exemplo real
Você já se perguntou como funcionam os despertadores no seu telefone? Ou como um aplicativo de notas lembra você de uma reunião exatamente às 14:30? No Android, isso é feito por um poderoso serviço do sistema — o Alarm Manager. Embora seu nome se traduza como "gerenciador de despertadores", na verdade é um agendador de tarefas universal que permite executar código em um horário específico, mesmo que seu aplicativo esteja minimizado ou o telefone esteja em modo de suspensão.
O tópico Alarm Manager Example é uma das consultas mais populares no StackOverflow (milhares de visualizações e dezenas de perguntas). E não é surpresa: iniciantes frequentemente se confundem com PendingIntent, BroadcastReceiver e os vários métodos como set(), setRepeating() ou setExact(). Neste artigo, analisaremos um exemplo funcional real em Kotlin que você pode aplicar imediatamente no seu projeto. Sem enrolação — apenas código e explicações.
O que é o Alarm Manager e para que serve?
Alarm Manager é um serviço do sistema Android que permite que seu aplicativo execute ações em um horário definido. A principal vantagem é que ele funciona independentemente do ciclo de vida do seu aplicativo. Você pode definir um alarme, fechar o aplicativo, desligar a tela — e o Alarm Manager ainda assim executará a tarefa no momento certo.
Cenários típicos de uso:
- Lembretes de eventos (reuniões, aniversários)
- Sincronização periódica de dados com o servidor
- Notificações agendadas (por exemplo, "Não se esqueça de beber água em 2 horas")
- Execução de tarefas em segundo plano conforme agendamento
É importante entender: o Alarm Manager não é um temporizador preciso para intervalos de milissegundos. Para isso, existem Handler ou Coroutines. O Alarm Manager é otimizado para funcionar no nível do sistema, considerando a economia de energia.
Componentes principais: PendingIntent e BroadcastReceiver
Antes de escrever código, vamos entender dois conceitos-chave sem os quais o Alarm Manager não funciona.
PendingIntent é uma "intenção adiada". Você não executa a ação imediatamente, mas a empacota em um contêiner especial que o Alarm Manager executará no futuro. Imagine que você dá a um entregador um envelope lacrado com a instrução: "Abra exatamente às 15:00". O envelope é o PendingIntent.
BroadcastReceiver é um receptor de mensagens de broadcast. Quando o AlarmManager é acionado, ele envia uma mensagem de broadcast que seu BroadcastReceiver captura. É nele que você escreve o código que deve ser executado pelo alarme.
Exemplo passo a passo: criando um alarme em Kotlin
Vamos escrever um aplicativo simples que exibe uma notificação 10 segundos após o pressionamento de um botão. Este exemplo é baseado em código real de uma resposta popular no StackOverflow.
Passo 1. Criando o BroadcastReceiver
Crie uma nova classe que processará a ativação do alarme:
import android.content.BroadcastReceiverimport android.content.Contextimport android.content.Intentimport android.widget.Toast
class AlarmReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { // Este código será executado quando o alarme disparar Toast.makeText(context, "Alarme disparou!", Toast.LENGTH_LONG).show() }}Por enquanto, estamos apenas exibindo um Toast. Em um aplicativo real, aqui poderia estar a criação de uma notificação, inicialização de um serviço ou qualquer outro código.
Passo 2. Registrando o BroadcastReceiver no manifesto
Para que o sistema conheça nosso receptor, ele precisa ser registrado no AndroidManifest.xml:
<receiver android:name=".AlarmRecei