Skip to content

Most visited

Recently visited

navigation

Otimização para soneca e aplicativo em espera

A partir do Android 6.0 (API de nível 23), o Android apresenta dois recursos de economia de energia que prolongam a vida da bateria para os usuários ao controlar como os aplicativos se comportam quando um dispositivo não está ligado a uma fonte de energia. A Soneca reduz o consumo de bateria, adiando CPU em segundo plano e atividade de rede para aplicativos quando o dispositivo não for utilizado por longos períodos de tempo. Aplicativo em espera adia a atividade de rede em segundo plano para aplicativos com os quais o usuário não tenha interagido recentemente.

Soneca e Aplicativo em espera controlam o comportamento de todos os aplicativos em execução no Android 6.0 ou versão posterior, independentemente se são direcionados especificamente para o API de nível 23. Para garantir a melhor experiência para os usuários, teste seu aplicativo nos modos Soneca e Aplicativo em espera e faça os ajustes necessários ao seu código. As seções abaixo fornecem detalhes.

Entender a Soneca

Se um usuário deixa um dispositivo desconectado e parado por um período de tempo, com a tela apagada, o dispositivo entra em modo Soneca. No modo Soneca, o sistema tenta economizar bateria, restringindo o acesso de aplicativos à rede e a serviços de uso intensivo da CPU. Ele também impede que aplicativos acessem a rede e adia seus trabalhos, sincronizações e alarmes padrão.

Periodicamente, o sistema sai da Soneca por um breve período para permitir que os aplicativos realizem suas atividades adiadas. Durante essa janela de manutenção, o sistema executa todos os seus trabalhos, sincronizações e alarmes, e permite que os aplicativos acessem a rede.

Figura 1. A Soneca fornece uma janela de manutenção recorrente para que os aplicativos usem a rede e realizem atividades pendentes.

Na conclusão de cada janela de manutenção, o sistema entra em Soneca novamente, suspendendo o acesso à rede e adiando trabalhos, sincronizações e alarmes. Com o tempo, o sistema programa janelas de manutenção com frequência cada vez menor, ajudando a reduzir o consumo da bateria em casos de inatividade mais longa, quando o dispositivo não está conectado a um carregador.

Assim que o usuário ativa o dispositivo, movendo-o, ligando a tela ou conectando um carregador, o sistema sai da Soneca e todos os aplicativos voltam à atividade normal.

Restrições da Soneca

As seguintes restrições se aplicam aos aplicativos durante a Soneca:

Lista de verificação de Soneca

Adaptação do aplicativo à Soneca

A Soneca pode afetar aplicativos de forma diferente, dependendo dos recursos que oferecem e dos serviços que usam. Muitos aplicativos funcionam normalmente durante os ciclos de Soneca, sem modificação. Em alguns casos, você deve otimizar a maneira com que seu aplicativo controla rede, alarmes, trabalhos e sincronizações. Aplicativos devem ser capazes de controlar as atividades eficientemente durante cada janela de manutenção.

A Soneca é particularmente propensa a afetar atividades que os alarmes AlarmManager e timers controlam, porque alarmes no Android 5.1 (API de nível 22) ou inferior não são acionados quando o sistema está em Soneca.

Para ajudar na programação de alarmes, o Android 6.0 (API de nível 23) apresenta dois novos métodos AlarmManager: setAndAllowWhileIdle() e setExactAndAllowWhileIdle(). Com estes métodos, você pode definir alarmes que disparam mesmo se o dispositivo estiver em Soneca.

Observação: Nem setAndAllowWhileIdle() nem setExactAndAllowWhileIdle() podem disparar alarmes mais de uma vez a cada 9 minutos, por aplicativo.

A restrição da Soneca sobre o acesso à rede provavelmente também pode afetar seu aplicativo, especialmente se o aplicativo depender de mensagens em tempo real, como convites ou notificações. Se seu aplicativo requer uma conexão persistente com a rede para receber mensagens, você deve usar o Google Cloud Messaging (GCM) se possível.

Para confirmar que seu aplicativo se comporta como esperado com a Soneca, você pode usar comandos adb para forçar o sistema a entrar e sair da Soneca e observar o comportamento do aplicativo. Para obter detalhes, consulte Testes de Soneca e aplicativo em espera.

Entender Aplicativo em espera

O Aplicativo em espera permite que o sistema determine se um aplicativo está ocioso quando o usuário não o está usando ativamente. O sistema determina isso quando o usuário fica sem tocar no aplicativo por determinado período e nenhuma das condições a seguir se aplica:

Quando o usuário conecta o dispositivo a uma fonte de alimentação, o sistema libera aplicativos do estado de espera, permitindo-lhes acessar livremente a rede e executar os trabalhos e sincronizações pendentes. Se o dispositivo permanece ocioso por longos períodos, o sistema permite aos aplicativos ociosos acessar a rede aproximadamente uma vez por dia.

Uso do GCM para interagir com o aplicativo enquanto o dispositivo está ocioso

O Google Cloud Messaging (GCM) é um serviço de nuvem para dispositivo que permite aceitar mensagens descendentes em tempo real entre serviços back-end e aplicativos em dispositivos Android. O GCM fornece uma conexão única, persistente com a nuvem; todos os aplicativos que precisam de mensagens em tempo real podem compartilhar esta conexão. Esta conexão compartilhada otimiza significativamente o consumo da bateria, tornando desnecessário que múltiplos aplicativos mantenham suas próprias conexões persistentes separadas, o que pode esgotar a bateria rapidamente. Por este motivo, se o seu aplicativo requer integração de mensagens com um serviço back-end, é altamente recomendável que você use o GCM, se possível em vez de manter sua própria conexão de rede persistente.

O GCM é otimizado para trabalhar com modos ociosos de Soneca e Aplicativo em espera por meio de mensagens GCM de alta prioridade. Mensagens GCM de alta prioridade permitem que você desperte seu aplicativo de forma confiável para acessar a rede, mesmo se o dispositivo do usuário estiver em Soneca ou se o aplicativo estiver no modo Aplicativo em espera. Em Soneca ou no modo Aplicativo em espera, o sistema envia a mensagem e dá ao aplicativo acesso temporário a serviços de rede e wakelocks parciais, depois retorna o dispositivo ou aplicativo ao estado de ocioso.

Mensagens GCM de alta prioridade não afetam o modo Soneca e nem o estado de nenhum outro aplicativo. Isto significa que seu aplicativo pode usá-los para se comunicar eficientemente, minimizando o impacto à baterias em todo o sistema e dispositivo.

Como uma prática recomendada geral, se seu aplicativo requer mensagens descendentes, ele deve usar GCM. Se seu servidor e cliente já utilizam GCM, certifique-se de que seu serviço usa mensagens de alta prioridade para mensagens críticas, pois isso despertará aplicativos de forma confiável, mesmo se o dispositivo estiver em Soneca.

Compatibilidade com outros casos de uso

Quase todos os aplicativos devem ser capazes de aceitar Soneca, ao controlar conectividade de rede, alarmes, trabalhos e sincronizações adequadamente e usar mensagens GCM de alta prioridade. Para um conjunto limitado de casos de uso, isso pode não ser suficiente. Para estes casos, o sistema fornece uma lista de permissões configurável de aplicativos que são parcialmente isentos de Soneca e otimizações de Aplicativo em espera.

Aplicativos que estejam na lista de permissões podem usar a rede e manter wake locks parciais durante a Soneca e Aplicativo em espera. No entanto, outras restrições ainda se aplicam ao aplicativo colocado na lista de permissões, da mesma forma que ocorre com outros aplicativos. Por exemplo, os trabalhos e sincronizações dos aplicativos da lista de permissões são adiados (API de nível 23 e inferior), e seus alarmes AlarmManager regulares não disparam. Uma aplicativo pode verificar se está atualmente na lista de permissões de isenção chamando isIgnoringBatteryOptimizations().

Os usuários podem configurar manualmente a lista de permissões em Configurações > Bateria > Otimização da Bateria. Alternativamente, o sistema fornece formas para aplicativos solicitarem que os usuários os coloquem na lista de permissões.

Antes de pedir ao usuário para adicionar seu aplicativo à lista de permissões, verifique se o aplicativo corresponde aos casos de uso aceitável para lista de permissões.

Observação: As políticas do Google Play proíbem aplicativos de solicitar isenção direta dos recursos de Gerenciamento de Energia do Android 6.0+ (Soneca e Aplicativo em espera), a menos que a função principal do aplicativo seja afetada negativamente.

Testes de Soneca e Aplicativo em espera

Para garantir uma ótima prática para os usuários, você deve testar seu aplicativo totalmente em Soneca e Aplicativo em espera.

Testar o aplicativo com Soneca

Você pode testar o modo Soneca, seguindo estes passos:

  1. Configure um dispositivo de hardware ou dispositivo virtual com um Android 6.0 (API de nível 23) ou sistema de imagem superior.
  2. Conecte o dispositivo à máquina de desenvolvimento e instale o aplicativo.
  3. Execute o aplicativo e deixe-o ativo.
  4. Desligue a tela do dispositivo. (O aplicativo permanece ativo.)
  5. Force o sistema a percorrer os modos Soneca, executando os seguintes comandos:
    $ adb shell dumpsys battery unplug
    $ adb shell dumpsys deviceidle step

    Você pode precisar executar o segundo comando mais de uma vez. Repita-o até que o dispositivo mude de estado para ocioso.

  6. Observe o comportamento do seu aplicativo depois de reativar o dispositivo. Certifique-se que o aplicativo se recupera normalmente quando o dispositivo sai da Soneca.

Testar o aplicativo com Aplicativo em espera

Para testar o modo de espera do aplicativo:

  1. Configure um dispositivo de hardware ou dispositivo virtual com um Android 6.0 (API de nível 23) ou sistema de imagem superior.
  2. Conecte o dispositivo à máquina de desenvolvimento e instale o aplicativo.
  3. Execute o aplicativo e deixe-o ativo.
  4. Execute os seguintes comandos para forçar o aplicativo a entrar no modo Aplicativo em espera:
    $ adb shell dumpsys battery unplug
    $ adb shell am set-inactive <packageName> true
  5. Simule o despertar de seu aplicativo usando os seguintes comandos:
    $ adb shell am set-inactive <packageName> false
    $ adb shell am get-inactive <packageName>
  6. Observe o comportamento do seu aplicativo depois de despertá-lo. Certifique-se que o aplicativo se recupera normalmente do modo de espera. Particularmente, deve-se verificar se as notificações e os trabalho de segundo plano do aplicativo continuam a funcionar como o esperado.

Casos de uso aceitável para colocar na lista de permissões

A tabela abaixo destaca os casos de uso aceitáveis para solicitar ou estar na lista de permissões de exceção para otimizações de bateria. Em geral, seu aplicativo não deve estar na lista de permissões a menos que Soneca ou Aplicativo em espera atrapalhem a função principal do aplicativo ou se houver uma razão técnica pela qual o seu aplicativo não pode usar mensagens GCM de alta prioridade.

Para mais informações, consulte Compatibilidade com outros casos de uso .

Tipo Caso de uso Pode usar GCM? Lista de permissões aceitável? Observações
Mensagens instantâneas, bate-papo ou aplicativo de chamada. Requer entrega de mensagens em tempo real para usuários enquanto o dispositivo está em Soneca ou o aplicativo está no modo Aplicativo em espera. Sim, usar GCM Inaceitável Deve usar mensagens GCM de alta prioridade para despertar o aplicativo e acessar a rede.
Sim, mas não está usando mensagens GCM de alta prioridade.
Mensagens instantâneas, bate-papo ou aplicativo de chamada; aplicativos empresariais de VOIP. Não, não pode usar GCM por causa da dependência técnica de outro serviço de mensagens ou Soneca e Aplicativo em espera atrapalham a função principal do aplicativo. Aceitável
Aplicativo de automação de tarefa A função principal do aplicativo é programar ações automatizadas, como para mensagens instantâneas, chamadas de voz, novo gerenciamento de fotos ou localização de ações. Se aplicável. Aceitável
Aplicativo complementar de dispositivo periférico A função principal do aplicativo é manter uma conexão persistente com o dispositivo periférico com a finalidade de proporcionar acesso à internet ao dispositivo periférico. Se aplicável. Aceitável
O aplicativo só precisa se conectar a um dispositivo periférico periodicamente para sincronizar ou precisa se conectar somente a dispositivos como fones de ouvido sem fio, conectados via perfis de Bluetooth padrão. Se aplicável. Inaceitável
This site uses cookies to store your preferences for site-specific language and display options.

Hooray!

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a one-minute survey?
Help us improve Android tools and documentation.