Как бороться с (осиротевшими) WakeLocks?

Я думаю, что большинство из вас хотя бы слышали о WakeLocks . У многих из вас будет опытный их уже - сознательно или нет. Некоторые могут знать, как справляться с ними в целом, но лишь немногие знают, как бороться с «более сложными кандидатами».

Для тех, кто не знает, хотя выше ссылки приводит к объяснению, краткое резюме: приложения могут запрашивать WAKE_LOCK, чтобы сохранить компонент устройства из «спящего», чтобы они могли выполнять даже когда дисплей выключен. Это очень полезно в большинстве случаев (например, сохранение экрана во время навигации, поддержание активности WiFi в потоковой музыке) - но используется неправильно, это приводит к тому, что ваша батарея разряжается в течение короткого времени (до 25% в час) .

В большинстве случаев легко определить источник (обычно это плохое поведение) - я покажу это в ответе ниже, поскольку это может оказаться полезным для многих пользователей. Но что делать, если приложение, которое запросило WakeLock, выходит, не выпуская его? Система Android не позаботится об этом . Конечно, перезагрузка решила проблему - но это не всегда (желаемый) вариант.

Итак, с точки зрения пользователей (я не спрашиваю о решениях для разработки, но как пользователь может обрабатывать вещи):

Что можно сделать * пользователем * , чтобы решить проблему и избежать дальнейшего разряда батареи?

Я предпочитаю ответы not с участием root (так что все пользователи могут извлечь из этого выгоду). Однако «корневые решения» являются полностью обоснованными и приветствуются.

40 голосов | спросил Izzy 8 SatEurope/Moscow2012-12-08T01:28:36+04:00Europe/Moscow12bEurope/MoscowSat, 08 Dec 2012 01:28:36 +0400 2012, 01:28:36

4 ответа


37

Как я могу сказать, что я пострадал?

Это, наверное, первый вопрос для тех, кто не знаком с этой темой. С Gingerbread (Android 2.3) и выше, у вас есть служба на борту, которая помогает вам выяснить: статистика батареи. Хотя производители, как правило, размещают его в разных точках, он в основном находится в Настройки â † 'О телефоне â †' Аккумулятор или аналогичный, и показывает список приложений, которые использовали большую часть вашей батареи. Кроме того, это небольшой график. Коснитесь этого, и он приведет вас к экрану, подобному этому:

статистика батареи
Снимок экрана статистики батареи на Android 2.3

Я выбрал снимок экрана с одного из моих устройств, что иллюстрирует проблему. Глядя на нижние две синие полосы («Aktiv» = «Устройство было неактивным» (активным), «Bildschirm an» = «Screen on»), самая лучшая синяя полоса на «Aktiv» указывает на Wake Wake: устройство было занято, несмотря на факт, что экран был выключен. Таким образом, мы можем быть уверены, что у нас есть WakeLock, но мы не можем сказать, кто его вызвал.

Если ваше устройство не предлагает этот экран (или панели внизу: я только что обнаружил, например, что LG Optimus 4X под управлением Android 4.0.3 отключил эти полосы), вы можете найти их например используя Монитор батареи GSam :

Монитор батареи GSam
Аналогичная информация из Монитор батареи GSam - здесь упоминается" синие полосы "желтого /оранжевого

Что вызвало WakeLock?

К сожалению, на этот вопрос нельзя ответить, используя предварительно установленные приложения (за исключением, возможно, некоторых пользовательских дисков). Но есть доступные инструменты. Самый известный кандидат для этого - BetterBatteryStats и показывает причину в разделе частичных wakelocks :

BetterBatteryStats BetterBatteryStats2
Скриншоты из BetterBatteryStats

В первом примере 2 (взято из на странице playstore приложения) событие, вызывающее большую часть WakeLocks, было желательным: мы не хотим, чтобы воспроизведение было остановлено во время прослушивания музыки. Итак, второй пример 3 (взятый из реального случая на одном из моих устройств) может оказаться лучше: самые последние 3 события вызваны тем же самым приложением, которое потребовало WakeLock для поддержания активной службы IMAP.

Для альтернативы BetterBatteryStats , выберите приложение Wakelock Detector , упомянутое в ответ UzumApps - который, как представляется, легче обрабатывать специально для нетехников:

 Wakelock Detector: Сведения о приложении  Wakelock Detector: Выбрать процессы
Wakelock Detector - Нажмите на изображение, чтобы увеличить. (Источник: Google Play )

Что можно сделать?

Если это так ясно, как во втором примере в предыдущем разделе, действие совершенно очевидно - по крайней мере в моем случае: мне не нужно сразу сообщать , когда почта прилетает; задержка 30 минут абсолютно приемлема. Поэтому я зашел в почтовое приложение, отключил IMAP Push (см. Также: Push Email ) и вместо этого переключится на 30 минутный интервал опроса. WakeLocks не полностью исчез, но заметно снизился - время автономной работы заметно улучшилось.

Тогда есть случай, упомянутый в самом вопросе: приложение для плохого поведения, не выпускающее его WakeLock. Противостоять разработчику с вашими выводами и попросить исправить. Если он поставляет: проблема решена. Если нет: почти всегда есть альтернативное приложениедоступны.

Что делать, если это сама система Android?

Да, иногда это выглядит так: 98% и более потребляется некоторыми услугами Android. О, если это 98%, в большинстве случаев кандидат называется LocationManagerService . Плохой парень шпионит за нами? Не обязательно. В этом особом случае, указанный «плохой парень» даже не виноват - по крайней мере, не напрямую. Здесь это еще одно приложение, слишком часто запрашивающее текущее местоположение. В Setera.org есть отличная статья об этом: Точное определение утечки аккумулятора Android LocationManagerService . Чтобы дать реферат: он использует функцию Android dumpsys (требуется root!) Для сброса состояния системы и позволяет исследовать слушатели, установленные для LocationManagerService. Более пристальный взгляд на их конфигурационные показы, которые постоянно «забивают» его для информации о местоположении (некоторые делают это постоянно, т. Е. Без перерыва). Поскольку идентификатор приложения указан вместе, а в другом месте на дампе даже вместе с техническим именем приложения, вы все равно можете идентифицировать его и предпринять соответствующие действия.

А как насчет НЛО?

К сожалению, есть такие: Приложения, которые зарегистрировали WakeLock, а затем вышли, не выпуская его. Осталось * Неиспользуемый F *** ing Obsoletes * - WakeLocks не использовался. Таким образом, нет никакого способа просто принести приложение на передний план и переконфигурировать, или заставить его освободить свои WakeLocks.

Здесь единственное известное мне решение - перезагрузка - и я хотел бы иметь лучшее решение. Конечно, если вы знаете виновное приложение, шаги, касающиеся этого, такие же, как и выше: сообщите об этом разработчику, получите исправление или замените приложение. Но об избавлении от current WakeLock? Может быть, кто-то другой может обеспечить лучшую альтернативу перезагрузке?

Есть ли рекомендуемые дополнительные показания?

Конечно. На данный момент я могу добавить более позднее:

ответил Izzy 8 SatEurope/Moscow2012-12-08T02:08:06+04:00Europe/Moscow12bEurope/MoscowSat, 08 Dec 2012 02:08:06 +0400 2012, 02:08:06
6

Короче говоря, это очень хороший вопрос, но я боюсь, это оправдывает больше, чем просто информирование конечного пользователя!

Перепроектируйте ядро, чтобы устранить блокировки от бодрствования, и используйте более эффективный способ управления принципом, тем самым продлевая срок службы батареи.

К сожалению, это было принято как де-факто решение, чтобы включить «управление питанием», несмотря на то, что оно не совсем эффективно! Была обширная дискуссия о wakelocks (с Gregh Kroah Hartman - гуру Linux для разработки драйверов - googling для точной ссылки), другие сайты, такие как LWN.net , а другая статья объясняется на том же сайте здесь . В этой статье Грег Кроа Хартман упомянул об этом , в котором он, похоже, согласен с альтернативным решением, предложенным Рафаэлем Я. Wysocki , много документировали потенциальную альтернативу. Не уверен, что это действительно на месте в более современном ядре v3.x.x.

Плохо разработанные приложения могут и часто запрашивать wakelocks, например, держать экран включенным, но на самом деле в этом случае для сохранения экрана на самом деле есть более эффективный способ сделать это:

.
getWindow().addFlags(LayoutParams.FLAG_KEEP_SCREEN_ON);

В то же время, стремясь не допустить этого для жаргона и т. д. для конечного пользователя, на самом деле суть проблемы сводится к коду ядра в том, как управлять wakelocks.

Вот краткий обзор XDA о том, что такое wakelocks для непосвященных. Используя BetterBatteryStats , можно было точно определить, какой процесс дренирует аккумулятор, вики размещается на github и доступен на рынке здесь .

ответил t0mm13b 8 SatEurope/Moscow2012-12-08T01:51:54+04:00Europe/Moscow12bEurope/MoscowSat, 08 Dec 2012 01:51:54 +0400 2012, 01:51:54
3

Отъезд Детектор Wakelock: XDA-разработчики / Google Play :

Детектор Wakelock группирует wakelocks приложения в один расширяемый вид для лучшего внешнего вида. И он показывает, какие приложения запущены. Кроме того, в расширенном представлении приложения есть кнопки удаления информации об удалении.

 Wakelock Detector: Сведения о приложении  Wakelock Detector: Выбрать процессы
Нажмите, чтобы увеличить. (Источник: Google Play )

Раскрытие информации: Я являюсь ответственным разработчиком этого приложения. Еще четыре друга со мной работают над этим проектом как хобби.

ответил UzumApps 8 MarpmFri, 08 Mar 2013 13:30:05 +04002013-03-08T13:30:05+04:0001 2013, 13:30:05
1

Несколько способов, которые помогли бы пользователям неуправляемого устройства

  1. Увидев, что @Uzumapps, один из разработчиков приложения разместил решение , используя Wakelock Detector ( WLD ), Я удивлен, что он не обновил об использовании приложения, которое также можно использовать без корня, называемого Wakelock Detector Light ! Я обнаружил, что это поиск решения для моего нового устройства (нетронутого).

Это недавняя разработка и, следовательно, публикация этого для пользователей без ручного устройства. Протестировано как работа над Moto X Play (Android 6.0.1)

  • Загрузите ссылку WLD из Play Store выше

  • Руководство по использованию WLD здесь

  • Инструкции для неуправляемых устройств здесь . В нем есть все подробности, кроме как подвести итог:

      

    ресурс командной оболочки adb | grep -i partial_wake_lock

Примечание: Я не мог заставить второй метод работать, приветствовал бы решение для редактирования, чтобы заставить его работать для несовместимых парней вроде меня.

ответил beeshyams 2 J0000006Europe/Moscow 2016, 14:57:23

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132