Wake locks parciais travados

Wake locks parciais são um mecanismo da API PowerManager que possibilita que os desenvolvedores mantenham a CPU em funcionamento após a tela de um dispositivo ser desativada, seja devido ao tempo limite do sistema ou porque o usuário pressionou o botão liga/desliga. Seu app recebe um wake lock parcial ao chamar acquire() com a flag PARTIAL_WAKE_LOCK. Um wake lock parcial fica travado se for retido por muito tempo enquanto o app está sendo executado em segundo plano. Ou seja, quando nenhuma parte do app está visível para o usuário. Essa condição consome a bateria do dispositivo porque impede que ele entre em estados de baixo consumo de energia. Os wake locks parciais só devem ser usados quando for preciso e liberados assim que não forem mais necessários.

Caso seu app tenha um wake lock parcial travado, você pode usar as orientações nesta página para diagnosticar e corrigir o problema.

Detectar o problema

Nem sempre você sabe que os wake locks parciais do seu app estão travados. Se você já publicou o app, o recurso Android vitals pode ajudar a identificar o problema.

Android vitals

O recurso Android vitals pode ajudar a melhorar a performance do app alertando você, pelo Play Console, quando o app apresentar wake locks parciais travados. O Android vitals informa que há wake locks parciais travados quando ocorre pelo menos um wake lock parcial com duração de uma hora em segundo plano, em uma sessão de bateria.

A definição de duração da bateria depende da versão da plataforma.

  • No Android 10, a duração da bateria é a agregação de todos os relatórios de bateria recebidos em um determinado período de 24 horas. Um relatório de bateria se refere ao intervalo entre duas cargas, seja de menos de 20% a mais de 80% ou de qualquer nível de carga até 100%.
  • No Android 11, a duração da bateria é de um período fixo de 24 horas.

A duração da bateria mostrada é uma estimativa com base em informações de todos os usuários medidos do app. Parar informações sobre como o Google Play coleta dados do Android vitals, consulte a documentação do Play Console.

Depois de identificar wake locks parciais travados em excesso no app, a próxima etapa é resolver o problema.

Corrigir falha

Como os wake locks podem descarregar a bateria do dispositivo, não use wake locks se houver uma alternativa. A documentação Escolher a API certa para manter o dispositivo ativo pode ajudar você a encontrar a melhor solução para seu app.

Se você precisar usar um wake lock, siga as práticas recomendadas para garantir que ele não prejudique a eficiência do dispositivo. Em particular, verifique se todos os dispositivos que você adquiriu foram liberados e libere a trava o mais rápido possível.

Depois de corrigir o problema no código, verifique se o app libera os wake locks corretamente usando as seguintes ferramentas:

  • dumpsys: uma ferramenta que fornece informações sobre o status dos serviços do sistema em um dispositivo. Para verificar o status do serviço de energia, que inclui uma lista de wake locks, execute adb shell dumpsys power.

  • Battery Historian: uma ferramenta que analisa a saída de um relatório de bugs do Android em uma representação visual de eventos relacionados à energia.