Jak mogę stwierdzić, że mam na to wpływ?
Jest to prawdopodobnie pierwsze pytanie dla osób niezaznajomionych z tym tematem. Dzięki Gingerbread (Android 2.3) i nowszym masz na pokładzie usługę, która pomaga Ci zrozumieć: statystyki baterii. Chociaż producenci zwykle umieszczają go w różnych punktach, najczęściej można go znaleźć w Ustawieniach → Informacje o telefonie → Bateria lub podobna, i pokazuje listę aplikacji, które wykorzystały większość baterii. Na dodatek jest mały wykres. Dotknij tego, a pojawi się ekran podobny do tego:
Zrzut ekranu statystyk baterii na Androidzie 2.3
Wybrałem zrzut ekranu z jednego z moich urządzeń, który ilustruje problem. Patrząc na dwa dolne niebieskie słupki („Aktiv” = urządzenie pozostało w stanie czuwania (aktywne), „Bildschirm an” = „Screen on”), prawy niebieski pasek na „Aktiv” wskazuje, że WakeLock: urządzenie było zajęte pomimo fakt, że ekran został wyłączony. Dzięki temu możemy być całkiem pewni, że mamy WakeLock - ale nie wiemy, kto go spowodował.
Jeśli twoje urządzenie nie oferuje tego ekranu (lub pasków u dołu: Właśnie odkryłem, że np. LG Optimus 4X z Androidem 4.0.3 odciął te paski), możesz je znaleźć np. Za pomocą GSam Battery Monitor :
Podobne informacje z GSam Battery Monitor - tutaj wspomniane „niebieskie paski” są żółte / pomarańczowe
Co spowodowało WakeLock?
Niestety na to pytanie nie można odpowiedzieć przy użyciu wstępnie zainstalowanych aplikacji (z wyjątkiem, być może, niektórych niestandardowych ROM). Ale są dostępne narzędzia, które mogą. Najbardziej znanym kandydatem na to jest BetterBatteryStats , i pokazuje nam przyczynę w częściowej sekcji wakelocks :
Zrzuty ekranu z BetterBatteryStats
W pierwszym przykładzie 2 (pobranym ze strony sklepu z aplikacjami) zdarzenie powodujące większość WakeLocks było pożądane: nie chcemy, aby odtwarzanie zostało zatrzymane podczas słuchania muzyki. Tak więc drugi przykład 3 (wzięty z prawdziwego przypadku na jednym z moich urządzeń) może okazać się lepszy: 3 najwyższe zdarzenia są spowodowane przez tę samą aplikację, która potrzebowała WakeLock do utrzymania aktywnej usługi push IMAP.
Alternatywą dla BetterBatteryStats jest aplikacja Wakelock Detector wspomniana w odpowiedzi UzumApps - która wydaje się łatwiejsza w obsłudze, zwłaszcza dla osób bez technologii:
Detektor Wakelock - kliknij obraz, aby powiększyć. (Źródło: Google Play )
Co można zrobić?
Jeśli sprawa jest tak jasna, jak w drugim przykładzie w poprzedniej sekcji, działanie jest dość oczywiste - przynajmniej w moim przypadku: Nie muszę być natychmiast informowany o nadejściu wiadomości; opóźnienie 30 minut jest absolutnie dopuszczalne. Więc poszedłem do aplikacji poczty, wyłączyłem IMAP Push (patrz też: Push Email ) i zamiast tego przestawiłem się na 30-minutowy interwał odpytywania. WakeLocks nie zniknął całkowicie, ale znacznie spadł - żywotność baterii znacznie się poprawiła.
Jest też przypadek wspomniany w samym pytaniu: Aplikacja o złym działaniu, która nie wypuszcza swojego WakeLock. Skonfrontuj twórcę ze swoimi odkryciami i poproś o naprawę. Jeśli dostarczy: problem rozwiązany. Jeśli nie: prawie zawsze dostępna jest alternatywna aplikacja.
Co jeśli jest to sam system Android?
Tak, czasami tak to wygląda: 98% lub więcej konsumowane przez jakąś usługę Android. Och, jeśli wynosi 98%, w większości przypadków kandydat nazywa się LocationManagerService . Zły facet szpieguje nas? Niekoniecznie. W tym szczególnym przypadku wymieniony „zły facet” nie jest nawet winny - przynajmniej nie bezpośrednio. Oto kolejna aplikacja zbyt często żądająca bieżącej lokalizacji. Istnieje doskonały artykuł na Setera.org na ten temat: Pinpointing Android LocationManagerService drenaż baterii . Aby dać streszczenie: używa Androidadumpsys
funkcja (wymaga roota!), aby zrzucić stan systemu i pozwala zbadać detektory ustanowione dla usługi LocationManagerService. Bliższe spojrzenie na ich konfigurację pokazuje, które ciągle „uderzają” go o informacje o lokalizacji (niektóre robią to na stałe, tj. Bez przerwy). Ponieważ identyfikator aplikacji jest wymieniony razem, aw innym miejscu zrzutu, nawet wraz z nazwą techniczną aplikacji, nadal możesz go zidentyfikować i podjąć odpowiednie działania.
A co z UFO?
Niestety istnieją: Aplikacje, które zarejestrowały WakeLock - a następnie zakończyły działanie bez jego zwolnienia. Pozostały * Nieużywane F *** ing Przestarzałe * - Blokada WakeLocks jest bezużyteczna. Więc nie ma sposobu, aby po prostu przenieść aplikację na pierwszy plan i zmienić jej konfigurację, lub pozwolić jej zwolnić WakeLocks.
Tutaj jedynym znanym mi rozwiązaniem jest restart - i chciałbym mieć lepsze rozwiązanie. Oczywiście, jeśli znasz winną aplikację, kroki jej dotyczące są takie same jak powyżej: poinformuj programistę, uzyskaj poprawkę - lub wymień aplikację. Ale o pozbyciu się obecnego WakeLock? Może ktoś inny może zapewnić lepszą alternatywę dla ponownego uruchomienia?
Czy są jakieś zalecane dalsze odczyty?
Pewnie. Na razie mogę dodać więcej później:
/sys/power/wake_lock
, ale że jeśli zrobiłeś to w „właściwy” sposób za pomocą PowerManager i PowerManager.WakeLock, usługa utrzymałaby prawdziwy wakelock i zwolnijcie go, nawet jeśli wasz proces został zabity ...