Otimizar para os modos Soneca e App em espera

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.

Figura 1. O Soneca fornece uma janela de manutenção recorrente para usem a rede e processem atividades pendentes.

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:

Lista de verificação do 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 ao 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:

.

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:

  1. Configurar um dispositivo de hardware ou dispositivo virtual com o Android 6.0 (API) nível 23) ou imagem de sistema superior.
  2. Conecte o dispositivo à máquina de desenvolvimento e instale o aplicativo.
  3. Execute o app e deixe-o ativo.
  4. Force o sistema a entrar no modo ocioso executando o seguinte comando:
        $ adb shell dumpsys deviceidle force-idle
        
  5. Quando estiver pronto, saia do modo ocioso executando o seguinte comando:
        $ adb shell dumpsys deviceidle unforce
        
  6. Reative o dispositivo executando o seguinte comando:
        $ adb shell dumpsys battery reset
        
  7. 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:

  1. Configurar um dispositivo de hardware ou dispositivo virtual com o Android 6.0 (API) nível 23) ou imagem de sistema superior.
  2. Conecte o dispositivo à máquina de desenvolvimento e instale o aplicativo.
  3. Execute o app e deixe-o ativo.
  4. Execute os seguintes 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
        
  5. Simule o despertar do seu app usando os seguintes comandos:
        $ adb shell am set-inactive <packageName> false
        $ adb shell am get-inactive <packageName>
        
  6. 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