As ativações são um mecanismo da API
AlarmManager
que
permite que os desenvolvedores definam um alarme para ativar um dispositivo em um horário especificado. Para definir um alarme de ativação, o app chama um dos métodos set()
no
AlarmManager
,
com
a flag
RTC_WAKEUP
ou
ELAPSED_REALTIME_WAKEUP
.
Quando um alarme de ativação é acionado, o dispositivo sai do modo de baixa energia
e mantém um wake lock parcial enquanto executa o método
onReceive()
ou
onAlarm()
do alarme. Se os alarmes de ativação forem acionados em excesso, podem descarregar a
bateria do dispositivo.
Para ajudar a melhorar a qualidade do app, o Android monitora automaticamente os apps em busca de alarmes com ativação excessiva e mostra as informações no Android vitals. Para informações sobre como os dados são coletados, consulte os documentos do Play Console.
Caso seu app esteja ativando o dispositivo excessivamente, use as orientações desta página para diagnosticar e corrigir o problema.
Corrigir o problema
O AlarmManager
foi
introduzidas nas primeiras versões da plataforma Android, mas, com o passar do tempo, muitas pessoas
casos que antes exigiam
AlarmManager
agora estão
mais bem atendidos por recursos mais recentes,
WorkManager
Esta seção contém dicas para reduzir os alarmes de ativação. Contudo, a longo prazo,
é recomendado migrar seu app para seguir as sugestões da seção de práticas
recomendadas.
Identifique os locais no app em que você pode programar alarmes de ativação e reduzir a frequência com que esses alarmes são acionados. Confira algumas dicas:
Procure chamadas para os vários métodos
set()
doAlarmManager
que incluem a flagRTC_WAKEUP
ouELAPSED_REALTIME_WAKEUP
.Recomendamos que você inclua o nome do pacote, da classe ou do método no nome da tag do alarme para identificar facilmente o local no código-fonte em que o alarme foi definido. Confira mais algumas dicas:
- Não inclua informações de identificação pessoal (PII, na sigla em inglês) no nome, como
um endereço de e-mail. Caso contrário, o dispositivo vai registrar
_UNKNOWN
, em vez do nome do alarme. - Não busque o nome da classe ou do método de forma programática, por exemplo, chamando
getName()
, porque o nome pode ser ofuscado pelo Proguard. Em vez disso, use uma string codificada. - Não adicione um contador ou identificadores exclusivos às tags de alarme. O sistema não vai poder agregar alarmes definidos dessa forma porque todos têm identificadores exclusivos.
- Não inclua informações de identificação pessoal (PII, na sigla em inglês) no nome, como
um endereço de e-mail. Caso contrário, o dispositivo vai registrar
Depois de corrigir o problema, verifique se os alarmes de ativação estão funcionando conforme o esperado executando o comando ADB abaixo:
adb shell dumpsys alarm
Esse comando fornece informações sobre o status do serviço do sistema de alarme no dispositivo. Para mais informações, consulte dumpsys.
Práticas recomendadas
Use os alarmes de ativação apenas se o app precisar executar uma operação voltada ao usuário, como postar uma notificação ou enviar um alerta. Para conferir uma lista de práticas recomendadas da AlarmManager, consulte Programar alarmes.
Não use o
AlarmManager
para
programar tarefas em segundo plano, especialmente tarefas repetitivas ou de rede. Para programar tarefas em segundo plano, use o
WorkManager,
que oferece os benefícios abaixo:
- Lotes: as tarefas são combinadas para que o consumo da bateria seja reduzido.
- Persistência: se o dispositivo for reinicializado, as tarefas programadas do WorkManager vão ser executadas após a reinicialização.
- Critérios: tarefas podem ser executadas com base nas condições, por exemplo, se o dispositivo está carregando ou se o Wi-Fi está disponível.
Para mais informações, consulte o Guia para o processamento em segundo plano.
Não use o AlarmManager
para programar operações de tempo válidas apenas enquanto o app estiver em execução.
Em outras palavras, a operação de tempo precisa ser cancelada quando o usuário sai do
app. Nessas situações, use a classe
Handler
, que é
mais fácil de usar e muito mais eficiente.
Recomendados para você
- Observação: o texto do link aparece quando o JavaScript está desativado.
- Wake locks parciais travados
- ANRs