Chyba większość z was przynajmniej słyszała o WakeLocks . Wielu z was już ich doświadczyło - świadomie czy nie. Niektórzy mogą wiedzieć, jak sobie z nimi poradzić, ale tylko nieliczni wiedzą, jak postępować z „bardziej skomplikowanymi kandydatami”.
Dla tych, którzy nie wiedzą, chociaż powyższy link prowadzi do wyjaśnienia, krótkie podsumowanie: Aplikacje mogą poprosić o WAKE_LOCK
„wstrzymanie” elementu urządzenia, aby mogli wykonać zadanie, nawet gdy wyświetlacz jest wyłączony. Jest to bardzo przydatne w większości przypadków (np. Utrzymanie ekranu podczas nawigacji, utrzymywanie Wi-Fi aktywne w celu strumieniowego przesyłania muzyki) - ale użyte w niewłaściwy sposób powoduje wyczerpanie baterii w krótkim okresie (do 25% na godzinę) .
W większości przypadków łatwo jest zidentyfikować źródło (zwykle źle zachowująca się aplikacja) - pokażę to w odpowiedzi poniżej, ponieważ może to okazać się pomocne dla wielu użytkowników. Ale co zrobić, jeśli aplikacja, która poprosiła o WakeLock, zakończy działanie bez jej zwolnienia? System Android nie zajmie się tym . Oczywiście ponowne uruchomienie rozwiązałoby problem - ale nie zawsze jest to (pożądana) opcja.
Z punktu widzenia użytkowników (nie pytam o rozwiązania programistyczne, ale o to, jak użytkownik może sobie poradzić):
Co może zrobić * użytkownik *, aby rozwiązać problem i uniknąć dalszego rozładowania baterii?
Wolę odpowiedzi bez udziału roota (aby wszyscy użytkownicy mogli z niego skorzystać). Jednak „zrootowane rozwiązania” są w pełni aktualne i mile widziane.
źródło
/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 ...Odpowiedzi:
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 Androida
dumpsys
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:
źródło
Krótko mówiąc, jest to bardzo dobre pytanie, ale obawiam się, że to więcej niż uzasadnienie dla użytkownika końcowego!
Przeprojektuj jądro, aby wyeliminować blokady wake-up i użyj bardziej dokładnego i skutecznego sposobu zarządzania tą zasadą, tym samym przedłużając żywotność baterii.
Niestety, zostało zaakceptowane jako de facto rozwiązanie umożliwiające „zarządzanie energią”, mimo że nie jest również całkiem wydajne! Odbyła się obszerna dyskusja na temat wakelocków (z Greghiem Kroah Hartmanem - guru Linuksa zajmującym się tworzeniem sterowników - szukam dokładnego linkowania), innymi stronami, takimi jak LWN.net i innym artykułem wyjaśnionym na tej samej stronie tutaj . W tym artykule Gregh Kroah Hartman odniósł się do tego bloga , w którym wydaje się zgadzać z alternatywnym rozwiązaniem zaproponowanym przez Rafaela J. Wysockiego, wiele udokumentował o potencjalnej alternatywie. Nie jestem pewien, czy jest to faktycznie dostępne w bardziej nowoczesnym jądrze v3.xx
Źle zaprojektowane aplikacje mogą i często żądają wakelocków, takich jak utrzymanie ekranu, ale w rzeczywistości w tym scenariuszu utrzymywania ekranu jest skuteczniejszy sposób:
Podczas gdy dążenie do uniknięcia tego od żargonu itp. Dla użytkownika końcowego, tak naprawdę sedno problemu sprowadza się do kodu jądra w sposobie zarządzania wakelockami.
Oto krótkie podsumowanie XDA na temat tego, czym są wakelocks dla niewtajemniczonych. Dzięki zastosowaniu BetterBatteryStats , można było dokładnie zobaczyć, które proces rozładowania akumulatora, wiki jest hostowany na github i jest dostępny na rynku tutaj .
źródło
Sprawdź Wakelock Detector: XDA-Developers / Google Play :
Detektor Wakelock grupuje wakelocks aplikacji w jeden rozwijany widok dla lepszego wyglądu. I pokazuje, które aplikacje są uruchomione. W rozszerzonym widoku aplikacji znajdują się przyciski informacyjne „Odinstaluj zabijanie”.
Kliknij obraz, aby powiększyć. (Źródło: Google Play )
Ujawnienie: Jestem jednym z odpowiedzialnych programistów tej aplikacji. Czterech kolejnych przyjaciół pracuje ze mną jako hobby.
źródło
Kilka sposobów, które pomogłyby użytkownikom urządzeń, które nie zostały uruchomione
Jest to najnowszy rozwój, dlatego opublikowano go dla użytkowników nieutrojonowanych urządzeń. Testowany jako działający w Moto X Play (Android 6.0.1)
Pobierz WLD z linku do sklepu Play powyżej
Podręcznik użytkowania WLD tutaj
Instrukcje dla niezrootowanych urządzeń tutaj . Zawiera wszystkie szczegóły, ale podsumowując:
Włącz debugowanie USB na urządzeniu i
adb
Pobierz Wakelock Unlocker na Chrome na swojego laptopa (działa również na Chromium)
Włącz to i gotowe!
Wersja Wakelock Detector Light nie wyświetla statystyk od momentu odłączenia
Uwaga: nie mogłem uruchomić drugiej metody, chętnie skorzystam z rozwiązania edycyjnego, które sprawi, że będzie działać dla niezbyt doświadczonych facetów takich jak ja
źródło