Wie berechnet Android den Batterieverbrauch von Apps?


24

Wie misst Android den Energieverbrauch einzelner Hardwarekomponenten? Wie misst Android den Energieverbrauch jedes einzelnen Prozesses?


Ich denke, wie viele Anweisungen in 1 Sekunde durchgeführt werden.
AZ_

6
@Algo: Es wird völlig irreführend sein anzunehmen, dass eine Hintergrundanwendung, die viel CPU verwendet, mehr Batteriehunger hat als eine andere Anwendung, die wenig CPU, aber viel WLAN, GPS und Display verwendet.
Lie Ryan

Wenn ja, können Sie einen Hinweis auf die Anzahl der Berechtigungen erhalten, die eine Anwendung erworben hat. Nur eine Idee.
AZ_

@LieRyan in den Batteriestatistiken, ist nicht WLAN, GPS, Bluetooth, etc. als ihr eigener "Verbraucher" der Batterie berechnet?
Ryan Conrad

Antworten:


11

Android verfolgt Ereignisse, die sich auf den Akkuverbrauch auswirken, und speichert diese Informationen in der Datei batterystats.bin. Einige Beispiele:

  • Der Bildschirm für die Anzeigedauer war mit einer bestimmten Helligkeitseinstellung aktiviert
  • welche Anwendung (oder Nicht-Android-App-Prozess) und wie lange eine Wecksperre gehalten wird (verhindert, dass das Gerät in den Ruhezustand wechselt)
  • CPU-Auslastung pro Prozess (Android-App oder anderer Prozess)
  • Telefonsignalstärke
  • GPS-Nutzung
  • etc.

Android berechnet anhand der vom Hersteller auf dem Gerät enthaltenen Konfigurationsinformationen, wie viel Strom jede Anwendung oder Komponente (z. B. Bildschirm) verbraucht.

Es wird nicht alles gemessen, sodass die Statistiken manchmal irreführend sein können, aber mit jeder Android-Plattform-Version wird es besser.

Die Batteriestatistik kann vom Gerät mithilfe der folgenden Methoden ausgegeben werden:

adb shell dumpsys batterystats

Hier ist ein interessantes Fragment eines Beitrags von Diane Hackborn mit weiteren Details zum Stromverbrauch von Wecksperren :

Es gibt zwei Möglichkeiten, wie die Leistung von Wecksperren berechnet wird.

  1. Bei einigen Chipsätzen muss nur ein Aktivierungssperre gedrückt werden, um zu verhindern, dass die CPU vollständig in den Energiesparmodus wechselt. In der gemeldeten Akkunutzung wird dieser zusätzliche Stromverbrauch auf alle Apps mit Wecksperren verteilt.

  2. Selbst wenn die Aktivierungssperre selbst keinen Stromverbrauch verursacht, kann das Halten einer Aktivierungssperre in einer App anderen Anwendungen ermöglichen, ausgeführt zu werden und die CPU zu belasten, wenn dies sonst nicht der Fall wäre. (Einige Apps haben beispielsweise eine {sleep (1); do something;} -Schleife, die nicht ausgeführt werden würde, wenn keine Aktivierungssperren festgelegt würden.) Um dies zu beheben, wird die Hälfte der CPU-Auslastung von Anwendungen als Schuld zugewiesen diejenigen, die Weckschlösser halten.


Können Sie Quellen / Referenzen angeben, die Ihre Antwort belegen?
Diimdeep

Alle Informationen stammen aus dem bereitgestellten Link zu Google + Thread von Google-Entwicklern, die mit diesem Bereich vertraut sind.
Paweł Nadolski

1
Der richtige Befehl für neue Geräte (nicht sicher, von welcher API) sollte lauten: adb shell dumpsys batterystats oder (falls Sie es in einer Datei wollen): adb shell dumpsys batterystats> batterystats.txt
android developer
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.