Como o Android calcula o consumo de bateria por aplicativos?

24

Como o Android mede a energia usada por cada componente de hardware? Como o Android mede a energia usada por cada processo individual?

diimdeep
fonte
Eu acho que quantas instruções são executadas em 1 segundo.
AZ_
6
@Algo: Será totalmente enganador supor que um aplicativo em segundo plano que usa muita CPU consome mais bateria do que outro aplicativo que usa pouco CPU, mas muito Wifi, GPS e tela.
Lie Ryan
Nesse caso, você pode obter dicas sobre o número de permissões que um aplicativo adquiriu .. apenas uma idéia.
AZ_2 /
@LieRyan nas estatísticas da bateria, wifi, gps, bluetooth etc. não são calculados como seu próprio "consumidor" da bateria?
Ryan Conrad

Respostas:

11

O Android rastreia eventos que afetam o uso da bateria e armazena essas informações no arquivo batterystats.bin. Alguns exemplos:

  • duração da tela com uma configuração específica de brilho
  • qual aplicativo (ou processo de aplicativo não Android) e por quanto tempo mantém um bloqueio de ativação (impede o dispositivo de dormir)
  • Uso da CPU por processo (aplicativo Android ou outro processo)
  • força do sinal do telefone
  • Uso de GPS
  • etc.

O Android calcula quanta energia cada aplicativo ou componente (por exemplo, tela) usa com base nas informações de configuração incluídas no dispositivo pelo fabricante.

Nem tudo é medido para que as estatísticas às vezes sejam enganosas, mas fica melhor a cada versão da Plataforma Android.

As estatísticas da bateria podem ser despejadas do dispositivo usando:

adb shell dumpsys batterystats

Aqui está um fragmento interessante de um post de Diane Hackborn com mais detalhes sobre o consumo de energia dos bloqueios de ativação:

Há duas maneiras de calcular a energia dos bloqueios de ativação.

  1. Em alguns chipsets, basta pressionar uma trava de ativação para impedir que a CPU entre em sono profundo. No uso da bateria relatado, esse uso extra de energia será distribuído por todos os aplicativos que possuem bloqueios de ativação.

  2. Mesmo que o bloqueio de ativação em si não cause uso de energia, manter um bloqueio de ativação em um aplicativo pode permitir que outros aplicativos sejam executados e a CPU quando não seriam de outra forma. (Por exemplo, algum aplicativo pode ter um loop {sleep (1); faça algo;} que não seria executado se nenhum bloqueio de ativação for mantido.) Para resolver isso, metade do uso de aplicativos da CPU é distribuído para ser responsabilizado. os que seguram fechaduras.

Paweł Nadolski
fonte
você pode fornecer fontes / referências que comprovem sua resposta?
diimdeep
Todas as informações são do link fornecido para o google + thread pelo desenvolvedor do Google familiarizado com esta área.
Paweł Nadolski
11
O comando correto para novos dispositivos (não tenho certeza de qual API) deve ser: adb shell dumpsys batterystats, ou (no caso de você querer-lo dentro de um arquivo): adb shell dumpsys batterystats> batterystats.txt
desenvolvedor android