Як я можу сказати, що я вплинув?
Це, мабуть, перше запитання до тих, хто не знайомий з цією темою. За допомогою пряників (Android 2.3) і вище, у вас є сервіс на борту, який допоможе вам з'ясувати: статистика батареї. Хоча виробники, як правило, розміщують його в різних точках, вони в основному знаходяться в Налаштуваннях → Про телефон → Акумулятор або подібне, і показує список програм, які використовують більшу частину акумулятора. Зверху на це невеликий графік. Торкніться цього, і він відкриє екран, подібний до цього:
Скріншот статистики батареї на Android 2.3
Я вибрав знімок екрана з одного зі своїх пристроїв, який ілюструє проблему. Дивлячись на дві нижні сині смуги ("Актив" = Пристрій тримався неспаним (активним), "Bildschirm a" = "Екран увімкнено"), найправіша синя смуга на "Активі" вказує на WakeLock: Пристрій залишався зайнятим, незважаючи на факт вимкнення екрана. Таким чином, ми можемо бути впевнені, що у нас є WakeLock - але ми не можемо сказати, хто це спричинив.
Якщо ваш пристрій не пропонує цей екран (або смужки внизу: я нещодавно виявив, наприклад, LG Optimus 4X під управлінням Android 4.0.3 відрізав ці смуги), ви можете їх знайти, наприклад, використовуючи монітор батареї GSam :
Подібна інформація від GSam Battery Monitor - тут згадані "сині смужки" жовто / оранжеві
Що спричинило WakeLock?
На жаль, на це питання не можна відповісти за допомогою попередньо встановлених додатків (крім, можливо, деяких користувальницьких ПЗУ). Але є інструменти, які можуть. Найвідоміший кандидат для цього - BetterBatteryStats , і він показує нам причину у своєму розділі про часткові неділі :
Знімки екрана від BetterBatteryStats
У першому прикладі 2 (взятий із сторінки відтворення магазину програми) подія, яка спричинила більшість WakeLocks, була бажаною: ми не хочемо, щоб відтворення припинялося під час прослуховування музики. Тож другий приклад 3 (взятий із реального випадку на одному з моїх пристроїв) може виявитись кращим: найвищі 3 події спричинені саме тим самим додатком, якому потрібен був WakeLock, щоб підтримувати IMP-сервіс активним.
Для альтернативи BetterBatteryStats ознайомтесь з додатком детектора Wakelock , згаданим у відповіді UzumApps, - який, як видається, простіше в роботі, особливо для нетехнологів:
Wakelock Detector - Клацніть зображення для збільшення. (Джерело: Google Play )
Що можна зробити?
Якщо справа настільки очевидна, як у другому прикладі в попередньому розділі, дія є цілком очевидною - принаймні в моєму випадку: мені не потрібно негайно повідомляти про це, коли надійде пошта; затримка на 30 хв абсолютно прийнятна. Тож я зайшов у поштовий додаток, відключив IMAP Push (див. Також: Push Email ) і замість цього перейшов на 30-хвилинний інтервал опитування. WakeLocks не повністю зник, але відчутно знизився - термін служби акумулятора помітно покращився.
Тоді є випадок, згаданий у самому запитанні: Погане поводження, яке не випускає WakeLock. Протистоять розробнику зі своїми висновками і вимагають виправити. Якщо він доставить: проблема вирішена. Якщо ні: майже завжди є альтернативна програма.
Що робити, якщо це сама система Android?
Так, іноді це виглядає саме так: 98% або більше споживається деяким сервісом Android. О, якщо це 98%, в більшості випадків кандидата називають LocationManagerService . Поганий хлопець, що шпигує за нами? Не обов'язково. У цьому спеціальному випадку перелічений «поганий хлопець» навіть не винен - принаймні, не безпосередньо. Ось ще одна програма занадто часто запитує поточне місцеположення. На Setera.org є чудова стаття про це: Визначення розряду акумулятора Android LocationManagerService . Для надання конспекту: Він використовує Androiddumpsys
функція (вимагає root!) для скидання системного стану та дозволяє досліджувати слухачів, створених для LocationManagerService. Більш детальний погляд на їх конфігурацію показує, які постійно "забивають" її для інформації про місцезнаходження (деякі роблять це постійно, тобто без перерви). Оскільки ідентифікатор програми вказаний разом, а в іншому місці на дамп навіть разом із технічним найменуванням додатків, ви все одно можете його ідентифікувати та вжити відповідних дій.
А як щодо НЛО?
На жаль, є такі: Програми, які зареєстрували WakeLock - і потім вийшли, не випускаючи його. Залишилось: * Невикористаний F *** ing застарілих * - WakeLocks не використовується. Тож жодний спосіб просто не виводити додаток на перший план і перенастроювати його, або змушувати його випускати свої WakeLocks.
Тут єдине відоме мені рішення - це перезавантаження - і я хотів би мати краще рішення. Звичайно, якщо ви знаєте, що винна програма, кроки щодо неї такі ж, як і вище: повідомте розробника, отримайте виправлення - або замініть додаток. Але про позбавлення від поточного WakeLock? Може хтось інший може запропонувати кращу альтернативу перезавантаженню?
Чи є деякі рекомендовані подальші читання?
Звичайно. Один зараз, я можу додати більше пізніше:
/sys/power/wake_lock
але якщо ви зробили це «правильним» способом за допомогою PowerManager та PowerManager.WakeLock, сервіс одночасно міститиме справжній будильник і відпустіть його, навіть якщо ваш процес був убитий ...