Jak Android oblicza zużycie baterii przez aplikacje?

24

Jak Android mierzy energię zużywaną przez poszczególne komponenty sprzętowe? Jak Android mierzy energię zużywaną przez poszczególne procesy?

diimdeep
źródło
Chyba ile instrukcji wykonuje się w ciągu 1 sekundy.
AZ_
6
@ Algo: Założenie, że aplikacja w tle, która zużywa dużo procesora, jest bardziej obciążona baterią niż inna aplikacja, która zużywa niewiele procesora, ale ma dużo Wi-Fi, GPS i wyświetlacza, będzie całkowicie myląca.
Lie Ryan
Jeśli tak, to możesz uzyskać wskazówkę dotyczącą liczby uprawnień uzyskanych przez aplikację. Po prostu pomysł.
AZ_
@LieRyan w statystykach baterii, czy Wi-Fi, GPS, Bluetooth itp. Nie są liczone jako „konsumenci” baterii?
Ryan Conrad

Odpowiedzi:

11

Android śledzi zdarzenia wpływające na zużycie baterii i przechowuje te informacje w pliku batterystats.bin. Kilka przykładów:

  • ekran czasu był włączony z określonym ustawieniem jasności
  • która aplikacja (lub proces aplikacji innej niż Android) i jak długo utrzymywała blokadę aktywacji (zapobiega uśpieniu urządzenia)
  • Zużycie procesora na proces (aplikacja na Androida lub inny proces)
  • siła sygnału telefonu
  • Wykorzystanie GPS
  • itp.

Android oblicza, ile mocy zużywa każda aplikacja lub komponent (np. Ekran) na podstawie informacji konfiguracyjnych zawartych w urządzeniu przez producenta.

Nie wszystko jest mierzone, więc statystyki mogą czasem wprowadzać w błąd, ale z każdą wersją platformy Android jest coraz lepiej.

Statystyki baterii można zrzucić z urządzenia za pomocą:

adb shell dumpsys batterystats

Oto interesujący fragment postu Diane Hackborn z dodatkowymi informacjami na temat zużycia energii przez blokady budzenia:

Istnieją dwa sposoby obliczania mocy z blokad budzenia.

  1. W niektórych chipsetach wystarczy przytrzymanie blokady wybudzania, aby procesor nie przeszedł w pełny głęboki sen. W zgłoszonym zużyciu baterii to dodatkowe zużycie energii zostanie rozdzielone na wszystkie aplikacje z blokadą aktywacji.

  2. Nawet jeśli sama blokada aktywacji nie powoduje zużycia energii, przytrzymanie blokady aktywacji w jednej aplikacji może pozwolić na uruchomienie innych aplikacji i procesora, gdy inaczej by tego nie zrobiły. (Na przykład, niektóre aplikacje mogą mieć pętlę {uśpienie (1); zrób coś;}, która nie uruchomiłaby się, gdyby blokady nie były wstrzymane.) Aby rozwiązać ten problem, połowa wykorzystania procesora przez aplikacje jest dystrybuowana, aby można było za to winić te posiadające śluzę.

Paweł Nadolski
źródło
czy możesz podać źródła / referencje potwierdzające twoją odpowiedź?
diimdeep
Wszystkie informacje pochodzą z podanego linku do wątku Google + przez programistę Google znającego ten obszar.
Paweł Nadolski
1
Prawidłowe polecenie dla nowych urządzeń (nie wiem, z którego API) powinno być: adb shell dumpsys batterystats, lub (jeśli chcesz, żeby był w pliku): adb shell dumpsys batterystats> batterystats.txt
programista Androida