As informações de uso da bateria são derivadas de estatísticas de uso da bateria e valores de perfil de energia.
Estatísticas de uso da bateria
O framework determina automaticamente as estatísticas de uso da bateria rastreando quanto tempo os componentes do dispositivo passam em diferentes estados. À medida que os componentes (chipset Wi-Fi, rádio celular, Bluetooth, GPS, tela, CPU) mudam de estado (DESLIGADO/LIGADO, inativo/potência máxima, brilho baixo/alto etc.), o serviço de controle informa ao serviço BatteryStats do framework. O BatteryStats coleta informações ao longo do tempo e as armazena para uso em reinicializações. O serviço não rastreia o consumo de corrente da bateria diretamente, mas coleta informações de tempo que podem ser usadas para aproximar o consumo de bateria por diferentes componentes.
O framework coleta estatísticas usando os seguintes métodos:
- Push. Os serviços que reconhecem mudanças de componentes enviam mudanças de estado para o serviço BatteryStats.
- Pull. Para componentes como o uso da CPU por apps, o framework extrai automaticamente os dados em pontos de transição (como iniciar ou interromper uma atividade) para tirar um instantâneo.
O consumo de recursos está associado ao aplicativo que usa o recurso. Quando vários aplicativos usam um recurso simultaneamente (como wakelocks que impedem a suspensão do sistema), o framework distribui o consumo entre esses aplicativos, embora não necessariamente de forma igual.
Para evitar a perda de estatísticas de uso em um evento de desligamento, que pode indicar problemas de consumo de energia da bateria (ou seja, o desligamento ocorre porque a bateria atingiu capacidade restante zero), o framework atualiza as estatísticas aproximadamente a cada 30 minutos.
As estatísticas de uso da bateria são processadas totalmente pela estrutura e não exigem modificações do OEM.
Valores do perfil de energia
Atenção:os fabricantes de dispositivos precisam fornecer um perfil de consumo de energia do componente que defina o valor de consumo atual do componente e o consumo aproximado da bateria causado pelo componente ao longo do tempo. Esse perfil é definido em platform/frameworks/base/core/res/res/xml/power_profile.xml. Para orientações sobre essas configurações, consulte Valores de energia.
Em um perfil de energia, o consumo é especificado em miliampères (mA) de corrente em uma tensão nominal e pode ser um valor fracionário especificado em microampères (uA). O valor precisa ser o mA consumido na bateria, não um valor aplicável a um trilho de energia que não corresponde à corrente consumida da bateria.
Por exemplo, um perfil de energia da tela especifica os mA de corrente necessários para manter a tela ligada com brilho mínimo e máximo. Para determinar o custo de energia (ou seja, a bateria consumida pelo componente de exibição) de manter a tela ligada, o framework rastreia o tempo gasto em cada nível de brilho e multiplica esses intervalos de tempo por um custo interpolado de brilho da tela.
A estrutura também multiplica o tempo de CPU de cada aplicativo pela mA necessária para executar a CPU em uma velocidade específica. Esse cálculo estabelece um ranking comparativo de quanta bateria um aplicativo consome ao executar o código da CPU. O tempo como app em primeiro plano e o tempo total, incluindo a atividade em segundo plano, são informados separadamente.