Para melhorar a duração da bateria, o Android pode afetar o estado do dispositivo monitorando o uso e a ativação do dispositivo. A plataforma pode entrar em um estado de suspensão para pausar a execução de atividades enquanto o dispositivo não está em uso.
Sobre o recurso Soneca
O recurso Doze prolonga a duração da bateria adiando a CPU em segundo plano do app e a atividade de rede quando um dispositivo não é usado por longos períodos.
Os dispositivos inativos no modo Soneca entram periodicamente em uma janela de manutenção, durante a qual os apps podem concluir o trabalho pendente (sincronizações, jobs etc.). O Doze retoma o sono por um período mais longo, seguido por outra janela de manutenção. A plataforma continua a sequência de suspensão/manutenção do Doze, aumentando o tempo de inatividade a cada vez, até atingir um máximo de algumas horas de sono. Em todos os momentos, um dispositivo no modo Soneca continua ciente do movimento e sai imediatamente do modo se um movimento for detectado.
O Android 7.0 e versões mais recentes estendem a Soneca para acionar um conjunto mais leve de otimizações sempre que um usuário desliga a tela do dispositivo, mesmo quando ele continua se movendo, permitindo uma duração mais longa da bateria.
Os serviços críticos do sistema geralmente são configurados pelos fabricantes de dispositivos para serem exentos do Doze. Os usuários também podem isentar apps específicos do Doze usando o menu "Configurações". No entanto, isentar apps pode causar o esgotamento da bateria do dispositivo. Por padrão, o recurso "Soneca" está desativado no AOSP. Para mais detalhes sobre como ativar o recurso, consulte Integração do recurso "Soneca".
Requisitos da Soneca
O suporte ao Doze exige que o dispositivo tenha um serviço de mensagens em nuvem, como o Firebase Cloud Messaging (FCM). Eventos de gatilho externos, como mensagens na nuvem, podem ativar temporariamente os apps para que eles funcionem enquanto o dispositivo permanece no modo Soneca.
O suporte total à Doze também requer um detector de movimento significativo (SMD, na sigla em inglês) no dispositivo. No entanto, o modo Doze leve no Android 7.0 e versões mais recentes não exige um SMD. Se o modo Soneca estiver ativado em um dispositivo que:
- Tem um SMD, e as otimizações completas do Doze ocorrem (incluindo otimizações leves).
- Não tem um SMD, apenas as otimizações leves do Doze ocorrem.
Ciclo de vida do Doze
O Doze começa quando a plataforma detecta que o dispositivo está inativo e termina quando uma ou mais atividades de critérios de saída ocorrem.
A plataforma detecta que um dispositivo está ocioso quando:
- O dispositivo está parado (usando SMD).
- A tela do dispositivo fica desligada por algum tempo.
O modo Soneca não é ativado quando um dispositivo movido a bateria está conectado a um carregador.
Durante a Soneca
A plataforma tenta manter o sistema em um estado de suspensão, retomando periodicamente as operações normais durante uma janela de manutenção e, em seguida, retornando o dispositivo para o modo de suspensão por períodos repetidos mais longos. Durante o modo de suspensão, as seguintes restrições estão ativas:
- Os apps não têm permissão para acessar a rede.
- Os wakelocks do app são ignorados.
- Os alarmes são adiados. Exclui alarmes de despertador e alarmes definidos usando
setAndAllowWhileIdle()
(limitado a 1 a cada 15 minutos por app enquanto no modo Doze). Essa isenção é destinada a apps (como o Agenda) que precisam mostrar notificações de lembretes de eventos. - As buscas por Wi-Fi não são realizadas.
- As sincronizações
SyncAdapter
e os jobsJobScheduler
são adiados até a próxima janela de manutenção. - Os apps que recebem mensagens SMS e MMS são colocados em uma lista de permissões temporária para que eles possam concluir o processamento.
Sair
A plataforma sai do modo Soneca quando detecta:
- Interação do usuário com o dispositivo
- Movimento do dispositivo
- A tela do dispositivo é ligada
- Alarme do AlarmClock iminente
As notificações não fazem o dispositivo sair do modo Soneca.
O Android 7.0 e versões mais recentes estendem o Doze ativando um modo de suspensão leve durante a tela desligada, antes que o dispositivo fique ocioso.
Figura 1. Modos de suspensão para dispositivos em movimento e parados.
Ação | Soneca | Soneca leve |
---|---|---|
Acionador | Tela desligada, com bateria, parada | Tela desligada, com bateria (desconectado) |
Marcação de tempo | Aumento sucessivo dos períodos com manutenção | Períodos de N minutos repetidos com janelas de manutenção |
Restrições | Nenhum acesso à rede, bloqueio de ativação ou verificação de GPS/Wi-Fi; alarmes e trabalhos/sincronizações adiados | Sem acesso à rede; trabalhos/sincronizações adiados, exceto durante as janelas de manutenção |
Comportamento | Somente mensagens de notificação push de alta prioridade recebidas | Todas as mensagens em tempo real (mensagens instantâneas, ligações etc.) recebidas; a mensagem de notificação push de alta prioridade permite o acesso temporário à rede |
Sair | Movimento, tela ligada ou alarme do relógio | Tela ativada |
Interação com o App em espera
- O tempo gasto no modo Soneca não é contabilizado no App em espera.
- Enquanto o dispositivo está no modo Soneca, os apps ociosos podem executar operações normais pelo menos uma vez por dia.
Integrar o recurso Soneca
Quando o modo Soneca está ativado, os dispositivos com suporte a
SENSOR_TYPE_SIGNIFICANT_MOTION
realizam otimizações completas do modo Soneca (incluindo otimizações leves).
Os dispositivos sem um SMD realizam apenas otimizações leves do modo Soneca. O Android
seleciona automaticamente as otimizações adequadas do Doze, e a configuração
do fornecedor não é necessária.
Para ativar o Doze em um dispositivo:
- Confirme se o dispositivo tem um serviço de mensagens na nuvem instalado.
- No arquivo de configuração da sobreposição do dispositivo
overlay/frameworks/base/core/res/res/values/config.xml
, definaconfig_enableAutoPowerModes
comotrue
: No AOSP, esse parâmetro é definido como<bool name="config_enableAutoPowerModes">true</bool>
false
(Doze desativado) por padrão.
- Confirme se os apps e serviços pré-carregados:
- Use as
diretrizes de otimização
de economia de energia. Para mais detalhes, consulte Testar e
otimizar apps.
OU
- São isentos do recurso Soneca e do App em espera. Para saber mais, consulte Como isentar apps.
- Use as
diretrizes de otimização
de economia de energia. Para mais detalhes, consulte Testar e
otimizar apps.
- Confirme se os serviços necessários estão isentos do Doze.
Dicas
- Se possível, use o FCM para mensagens downstream.
- Se os usuários precisarem receber uma notificação imediatamente, use uma mensagem de alta prioridade do FCM.
- Forneça informações suficientes no payload da mensagem inicial para evitar o acesso subsequente desnecessário à rede.
- Defina alarmes críticos com
setAndAllowWhileIdle()
esetExactAndAllowWhileIdle()
.
Testar e otimizar apps
Teste todos os apps (principalmente os pré-carregados) no modo "Soneca". Para mais detalhes, consulte Testes com os recursos Soneca e App em espera.