O Android tem dois recursos de economia de energia que prolongam a duração da bateria para os usuários, gerenciar o comportamento dos apps quando um dispositivo não está conectado a uma fonte de energia: Soneca e App em espera. O recurso Soneca reduz o consumo da bateria adiando CPU em segundo plano e atividade de rede para apps quando o dispositivo não é usado por muito tempo em determinados períodos. O App em espera adia a atividade de rede em segundo plano para sem atividade recente do usuário.
Enquanto o dispositivo estiver no modo Soneca, o estado acesso a determinados recursos recursos são adiados até a janela de manutenção. As restrições específicas estão listados em Gerenciamento de energia restrições.
Os modos Soneca e App em espera gerenciam o comportamento de todos os apps em execução no Android 6.0. ou mais recentes, mesmo se eles segmentarem especificamente o nível 23 da API. Para ajudar a garantir a melhor experiência para os usuários, teste seu app nos recursos Soneca e App Modos de espera e faça os ajustes necessários no código. O seguinte seções fornecem detalhes.
Entender o modo Soneca
Se um usuário deixar um dispositivo desconectado e parado por um período de tempo, com a tela é desligada, o dispositivo entra no modo Soneca. No modo Soneca, o sistema tenta para economizar bateria restringindo apps com uso intensivo de rede e CPU serviços. Ele também impede que apps acessem a rede e adia suas tarefas, sincronizações e alarmes padrão.
Periodicamente, o sistema sai do modo Soneca por um breve período para permitir que os apps concluam as atividades adiadas. Durante essa janela de manutenção, o sistema executa todos os trabalhos, sincronizações e alarmes pendentes, e permite que os apps acessem a rede.
![](https://developer.android.com/static/images/training/doze.png?authuser=5&hl=pt)
Quando a janela de manutenção é concluída, o sistema entra no modo Soneca novamente, suspender o acesso à rede e adiar trabalhos, sincronizações e alarmes. Com o tempo, o sistema programa janelas de manutenção com menos frequência, consumo em casos de inatividade mais longa quando o dispositivo não estiver carregando.
Quando o usuário ativa o dispositivo movendo-o, ligando a tela ou conectando um carregador, o sistema sai do modo Soneca e todos os apps voltam ao normal atividades.
Restrições do recurso Soneca
O sistema aplica as seguintes restrições aos apps durante o modo Soneca:
- Suspende o acesso à rede.
- Ignora acordar fechaduras.
- Adia padrão
AlarmManager
alarmes, incluindosetExact()
esetWindow()
, para a próxima janela de manutenção.- Se você precisar definir alarmes que disparam durante o "Soneca", use
setAndAllowWhileIdle()
ousetExactAndAllowWhileIdle()
. - Alarmes definidos com
setAlarmClock()
continuem a disparar normalmente. O sistema sai do modo Soneca pouco antes de alarmes disparam.
- Se você precisar definir alarmes que disparam durante o "Soneca", use
- Não realiza buscas por Wi-Fi.
- Não permite adaptadores de sincronização em execução.
- Não permite
JobScheduler
correr.
Lista de verificação do Soneca
- Se possível, use o Firebase Cloud Messaging (FCM) para downstream .
- Se os usuários precisarem ver uma notificação imediatamente, use um Mensagem de alta prioridade do FCM. Use apenas a prioridade alta para mensagens que resultem em uma notificação. Para mais orientações, consulte do FCM documentação sobre prioridade de mensagens para Android.
- Forneça informações suficientes na mensagem inicial payload, de modo que o acesso subsequente à rede é desnecessário.
- Defina alarmes críticos com
setAndAllowWhileIdle()
esetExactAndAllowWhileIdle()
. - Teste seu app no modo Soneca.
Adaptar seu app ao recurso Soneca
O modo Soneca pode afetar os apps de forma diferente, dependendo dos recursos que oferecem e os serviços que ela usa. Muitos apps funcionam normalmente durante os ciclos do Soneca sem modificação. Em alguns casos, é preciso otimizar a maneira como o app gerencia rede, alarmes, trabalhos e sincronizações. Os apps precisam conseguir gerenciar as atividades durante cada janela de manutenção.
Para ajudar a programar alarmes, você pode usar dois AlarmManager
métodos: setAndAllowWhileIdle()
e
setExactAndAllowWhileIdle()
Com esses métodos, você pode definir alarmes
que disparam mesmo se o dispositivo está no modo Soneca.
A restrição do modo Soneca no acesso à rede também pode afetar seu app, especialmente se o aplicativo depende de mensagens em tempo real, como cócegas ou notificações. Se seu aplicativo precisar de uma conexão persistente com a rede para receber mensagens, use o Firebase Cloud Messaging (FCM) se sempre que possível.
Para confirmar que o app se comporta como esperado com o "Soneca", use
Os comandos adb
para forçar o sistema a entrar e sair do modo Soneca e
observar o comportamento do seu app. Para mais detalhes, consulte
Testar com os recursos Soneca e App em espera.
Entender o App em espera
O App em espera permite que o sistema determine se um app está ocioso quando o usuário não está usá-lo ativamente. O sistema determina isso quando o usuário não tocar no app por um determinado período e nenhuma das condições a seguir aplicável:
- O usuário inicia o aplicativo explicitamente.
- O app tem um processo atualmente em primeiro plano, seja como uma atividade ou serviço em primeiro plano, ou em uso por outra atividade ou serviço de primeiro plano.
- O app gera uma notificação que os usuários veem na tela de bloqueio ou na bandeja de notificações.
Quando o usuário conecta o dispositivo a uma fonte de alimentação, o sistema libera apps do estado de espera, permitindo que acessem livremente a rede e executem qualquer tarefas e sincronizações pendentes. Se o dispositivo ficar ocioso por longos períodos, o permite que apps inativos acessem a rede aproximadamente uma vez por dia.
Usar o FCM para interagir com o app enquanto o dispositivo está inativo
Firebase Cloud O Messaging (FCM) é um serviço de nuvem para dispositivo que permite suporte em tempo real mensagens downstream entre serviços de back-end e apps em dispositivos Android. FCM fornece uma conexão única e permanente com a nuvem. Todos os apps que precisam as mensagens em tempo real podem compartilhar essa conexão. Esta conexão compartilhada otimiza significativamente o consumo da bateria, tornando-a desnecessário para vários aplicativos mantenham suas próprias conexões persistentes separadas, o que pode esgotar a bateria rapidamente. Por esse motivo, se o app exigir mensagens integração com um serviço de back-end, recomendamos que você use o FCM se em vez de manter sua própria conexão de rede persistente.
O FCM é otimizado para funcionar com os modos ociosos dos modos Soneca e App em espera. FCM as mensagens de alta prioridade permitem que você ative seu aplicativo para envolver o usuário. No modo Soneca ou no app No modo de espera, o sistema entrega a mensagem e dá ao app acesso temporário a serviços de rede e wakelocks parciais, depois retorna o dispositivo ou app ao o estado inativo. Para notificações sensíveis ao tempo e visíveis ao usuário, considere usar mensagens prioritárias para ativar a entrega no modo Soneca. Mensagens de alta prioridade podem resultarão em notificações. Consulte do FCM sobre mensagens de alta prioridade.
Para mensagens que não resultam em notificações, como a manutenção do conteúdo do app atualizado em segundo plano ou iniciar sincronizações de dados, use o FCM de prioridade normal e envio de mensagens. As mensagens de prioridade normal são entregues imediatamente quando o dispositivo no modo Soneca. Se o dispositivo estiver no modo Soneca, eles são entregues durante o período Soneca de janelas de manutenção ou assim que o usuário despertar o dispositivo.
Como prática recomendada geral, se seu aplicativo exigir mensagens downstream, use pelo FCM. Se o app já usa o FCM, verifique se ele usa mensagens de alta prioridade. somente para mensagens que resultem em notificações voltadas para o usuário.
Compatibilidade com outros casos de uso
Quase todos os aplicativos são compatíveis com o recurso Soneca, gerenciando a conectividade de rede, alarmes, trabalhos e sincronizações e usar mensagens do FCM. Para um conjunto restrito de usos em alguns casos, isso pode ser insuficiente. Para esses casos, o sistema fornece uma lista configurável de apps que estão parcialmente isentos dos recursos "Soneca" e "App em espera" e otimizações.
Um app parcialmente isento pode usar a rede e manter a ativação parcial
bloqueados durante os modos Soneca e App em espera. No entanto, outras restrições ainda se aplicam
para o app, da mesma forma que fazem com outros apps. Por exemplo, as tarefas e sincronizações do app
são adiados até o nível 23 da API e
AlarmManager
alarme não dispara. Um app pode verificar se está
na lista de isenções chamando
isIgnoringBatteryOptimizations()
:
Os usuários podem configurar manualmente a lista de apps isentos nas Configurações > Bateria > Otimização da bateria. Por outro lado, o sistema oferece maneiras para os apps pedirem aos usuários que os isentem:
- A maioria dos aplicativos pode invocar uma intent que contém
ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS
: - Apps que atendem a um caso de uso aceitável
pode invocar uma intent contendo
ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
ação da intent para permitir que o usuário adicione o app diretamente à lista de isenções, sem acessar as configurações do sistema.
Um app pode verificar se está na lista de isenções chamando
isIgnoringBatteryOptimizations()
:
Testar com os recursos Soneca e App em espera
Para ajudar a garantir uma ótima experiência aos usuários, teste o app totalmente no modo Soneca e App em espera.
Testar o app com o Soneca
Você pode testar o modo Soneca fazendo o seguinte:
- Configurar um dispositivo de hardware ou dispositivo virtual com o Android 6.0 (API) nível 23) ou uma imagem de sistema superior.
- Conecte o dispositivo à máquina de desenvolvimento e instale o aplicativo.
- Execute o aplicativo e deixe-o ativo.
- Force o sistema a entrar no modo inativo executando o seguinte comando:
$ adb shell dumpsys deviceidle force-idle
- Quando tudo estiver pronto, saia do modo inativo executando o seguinte comando:
$ adb shell dumpsys deviceidle unforce
- Reative o dispositivo executando o seguinte comando:
$ adb shell dumpsys battery reset
- Observe o comportamento do seu app depois de reativar o dispositivo. Marca que o aplicativo se recupere corretamente quando o dispositivo sai do modo Soneca.
Testar o app com o App em espera
Para testar o modo App em espera com seu app, faça o seguinte:
- Configurar um dispositivo de hardware ou dispositivo virtual com o Android 6.0 (API) nível 23) ou uma imagem de sistema superior.
- Conecte o dispositivo à máquina de desenvolvimento e instale o aplicativo.
- Execute o aplicativo e deixe-o ativo.
- Execute estes comandos para forçar o app a entrar no modo App em espera:
$ adb shell dumpsys battery unplug $ adb shell am set-inactive <packageName> true
- Simule a ativação do app usando os seguintes comandos:
$ adb shell am set-inactive <packageName> false $ adb shell am get-inactive <packageName>
- Observe o comportamento do seu app depois de despertá-lo. Confira se o app se recupera normalmente do modo de espera. Mais especificamente, verifique se o código as notificações e os trabalhos em segundo plano funcionem como esperado.
Casos de uso aceitáveis para isenção
A tabela a seguir destaca vários casos de uso e se é aceitável
para que os apps usem a ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
a ação da intent nessas situações. Em geral, seu app não atende a esses requisitos
exceções, a menos que os recursos "Soneca" ou "App em espera" interrompam a função principal do app; ou
há uma razão técnica pela qual seu app não pode usar o FCM de alta prioridade
e envio de mensagens.
Para mais informações, consulte Suporte para outros casos de uso.
Tipo | Caso de uso | Pode usar o FCM? | Isenção aceitável? | Observações |
---|---|---|---|---|
Mensagens instantâneas, bate-papo ou app de chamada. | Requer a entrega de mensagens em tempo real para os usuários enquanto o dispositivo está no modo Soneca ou o app está no modo App em espera. | Sim, usando o FCM. | Não aceitável | Use as mensagens de alta prioridade do FCM para ativar o app e acessar na rede. |
Sim, mas não está usando mensagens de alta prioridade do FCM. | ||||
Mensagens instantâneas, chat ou app de chamada. apps empresariais de VOIP. | Não é possível usar o FCM devido à dependência técnica de outra mensagem Soneca e App em espera interrompem a função principal do app. | Aceitável | ||
App Emergência. | Apps que protegem os usuários e as famílias. | Se aplicável. | Aceitável | |
App de automação de tarefas. | A função principal do app é programar ações automatizadas, como para o app instantâneo mensagens, chamadas de voz ou o novo gerenciamento de fotos. | Se aplicável. | Aceitável | |
App complementar de dispositivo periférico. | A função principal do app é manter uma conexão persistente com o dispositivo periférico com a finalidade de fornecer ao dispositivo periférico à Internet. | Se aplicável. | Aceitável | |
O app só precisa se conectar a um dispositivo periférico periodicamente para sincronizar. ou só precisa se conectar a dispositivos, como fones de ouvido sem fio, por meio de perfis Bluetooth padrão. | Se aplicável. | Não aceitável |