Para melhorar a vida útil da bateria do dispositivo, o Android pode afetar o estado do dispositivo monitorando o uso e o estado de vigília do dispositivo. A plataforma pode entrar em estado de suspensão para interromper a execução de atividades enquanto o dispositivo não estiver em uso.
Sobre Doze
O Doze prolonga a vida útil da bateria adiando a atividade da CPU e da rede em segundo plano do aplicativo quando um dispositivo não é usado por longos períodos.
Dispositivos ociosos no Doze entram periodicamente em uma janela de manutenção, durante a qual os aplicativos podem concluir trabalhos pendentes (sincronizações, trabalhos, etc.). O Doze então retoma o sono por um longo período de tempo, seguido por outra janela de manutenção. A plataforma continua a sequência de sono/manutenção Doze, aumentando a duração do tempo de inatividade a cada vez, até atingir um máximo de algumas horas de sono. Em todos os momentos, um dispositivo no Soneca permanece ciente do movimento e sai imediatamente do Soneca se o movimento for detectado.
O Android 7.0 e superior estende o Soneca para acionar um conjunto mais leve de otimizações sempre que um usuário desliga a tela do dispositivo, mesmo quando o usuário continua se movimentando, permitindo maior duração da bateria.
Os serviços críticos do sistema geralmente são configurados pelos fabricantes de dispositivos para serem isentos do Soneca. Os usuários também podem isentar aplicativos específicos do Doze usando o menu Configurações. No entanto, isentar aplicativos pode causar esgotamento da bateria do dispositivo. Por padrão, o Doze está desabilitado no AOSP; para obter detalhes sobre como ativar o Doze, consulte Integrando o Doze .
Requisitos para cochilar
O suporte ao Doze requer que o dispositivo tenha um serviço de mensagens em nuvem, como Firebase Cloud Messaging (FCM) . Eventos de gatilho externos, como mensagens na nuvem, podem ativar temporariamente os aplicativos para funcionarem enquanto o dispositivo permanece no modo Soneca.
O suporte Full Doze também requer um detector de movimento significativo (SMD) no dispositivo; no entanto, o modo Doze leve no Android 7.0 e superior não requer um SMD. Se o Soneca estiver ativado em um dispositivo que:
- Tem um SMD, ocorrem otimizações completas do Doze (inclui otimizações leves).
- Não possui SMD, apenas ocorrem otimizações leves do Doze.
Ciclo de vida do cochilo
O Doze começa quando a plataforma detecta que o dispositivo está ocioso e termina quando ocorrem uma ou mais atividades de critérios de saída.
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 enquanto um dispositivo alimentado por bateria está conectado a um carregador elétrico.
Durante o cochilo
A plataforma tenta manter o sistema em estado de suspensão, retomando periodicamente as operações normais durante uma janela de manutenção e, em seguida, retornando o dispositivo ao modo de suspensão por períodos repetidos mais longos. Durante o sono, as seguintes restrições estão ativas:
- Os aplicativos não têm acesso à rede.
- Wakelocks de aplicativos ignorados.
- Os alarmes são adiados. Exclui alarmes de despertador e alarmes definidos usando
setAndAllowWhileIdle()
(limitado a 1 a cada 15 minutos por aplicativo enquanto estiver no Soneca). Esta isenção destina-se a aplicações (como o Calendário) que devem mostrar notificações de lembretes de eventos. - As verificações de Wi-Fi não são executadas.
- As sincronizações
SyncAdapter
e os trabalhosJobScheduler
são adiados até a próxima janela de manutenção. - Os aplicativos que recebem mensagens SMS e MMS são colocados em uma lista de permissões temporária para que possam concluir seu processamento.
Saída
A plataforma sai do dispositivo do Doze quando detecta:
- Interação do usuário com o dispositivo
- Movimento do dispositivo
- A tela do dispositivo é ativada
- Alarme iminente AlarmClock
As notificações não fazem com que o dispositivo saia do Soneca.
O Android 7.0 e superior amplia o modo Soneca, ativando um modo de suspensão leve durante a tela desligada, antes que o dispositivo fique ocioso.
Figura 1. Modos de soneca para dispositivos estacionários e não estacionários.
Ação | Cochilar | Soneca leve |
---|---|---|
Acionar | Tela desligada, com bateria, parado | Tela desligada, com bateria (desconectada) |
Tempo | Períodos sucessivamente crescentes com manutenção | Períodos repetidos de N minutos com janelas de manutenção |
Restrições | Sem acesso à rede, wake lock ou varredura de GPS/Wi-Fi; alarmes e trabalhos/sincronizações adiados | Sem acesso à rede; trabalhos/sincronizações adiadas, exceto durante janelas de manutenção |
Comportamento | Somente mensagens de notificação push de alta prioridade recebidas | Todas as mensagens em tempo real (mensagens instantâneas, chamadas, etc.) recebidas; mensagem de notificação push de alta prioridade permite acesso temporário à rede |
Saída | Alarme de movimento, tela ligada ou despertador | Tela ligada |
Interação com o aplicativo em espera
- O tempo gasto em Soneca não conta para o App Standby.
- Enquanto o dispositivo estiver no modo Soneca, os aplicativos ociosos poderão realizar operações normais pelo menos uma vez por dia.
Integrar Soneca
Quando o Soneca está ativado, os dispositivos que suportam SENSOR_TYPE_SIGNIFICANT_MOTION
realizam otimizações completas do Soneca (incluindo otimizações leves); dispositivos sem SMD executam apenas otimizações leves do Doze. O Android seleciona automaticamente as otimizações apropriadas do Doze e a configuração do fornecedor não é necessária.
Para ativar o Soneca para um dispositivo:
- Confirme se o dispositivo possui um serviço de mensagens em nuvem instalado.
- No arquivo de configuração de sobreposição de dispositivo
overlay/frameworks/base/core/res/res/values/config.xml
, definaconfig_enableAutoPowerModes
comotrue
:<bool name="config_enableAutoPowerModes">true</bool>
No AOSP, esse parâmetro é definido comofalse
(Doze desabilitado) por padrão. - Confirme se os aplicativos e serviços pré-carregados:
- Use as diretrizes de otimização de economia de energia . Para obter detalhes, consulte Testando e otimizando aplicativos .
OU
- Estão isentos de Doze e App Standby. Para obter detalhes, consulte Isenção de aplicativos .
- Use as diretrizes de otimização de economia de energia . Para obter detalhes, consulte Testando e otimizando aplicativos .
- Confirme se os serviços necessários estão isentos do Doze.
Pontas
- Se possível, use o FCM para mensagens downstream .
- Se seus usuários precisarem ver uma notificação imediatamente, use uma mensagem de alta prioridade do FCM .
- Forneça informações suficientes na carga útil da mensagem inicial (para evitar acesso desnecessário à rede subsequente).
- Defina alarmes críticos com
setAndAllowWhileIdle()
esetExactAndAllowWhileIdle()
.
Teste e otimize aplicativos
Teste todos os aplicativos (especialmente aplicativos pré-carregados) no modo Soneca. Para obter detalhes, consulte Teste com Doze e App Standby .