База знаний по вэйклокам (BetterBatteryStats)

Перевод ©Dmitry Gaich 2020

Подборка, разъясняющая суть некоторых вэйклоков, причины их возникновения и методы устранения.

AlarmManager
AlarmManager обеспечивает доступ к службам пробуждения системы. Эти службы позволяют запланировать запуск приложений. Когда сигнал пробуждения срабатывает, связанная с ним цель обрабатывается системой, автоматически запуская нужное приложение, если оно уже не запущено. Зарегистрированные сигналы удерживаются, пока устройство спит (и могут опционально пробудить устройство, если сработают в это время), но будут очищены при выключении и перезагрузке телефона. Alarm Manager удерживает вэйклок CPU пока выполняется метод onReceive() приемника сигналов. Это гарантирует, что телефон не будет спать, пока Вы не закончите обработку передачи. После возврата onReceive(), Alarm Manager отпускает данный вэйклок. Это означает, что телефон в некоторых случаях перейдет в сон сразу же, как только закончится выполнение метода onReceive().
Известные действия: AlarmManager запускает не частичные вэйклоки, а приложения (цели), которые были установлены на запуск при срабатывании сигнала. Список сигналов можно увидеть в меню » Alarms».
Инструкция по анализу сигналов:
чтобы определить эти цели, выполните команду dumpsys alarm.
(Как это сделать, можно посмотреть, например, здесь или, чуть подробнее, тут.)
Это сохранит в дамп все события сигналов, и Вы сможете увидеть, что вызывает AlarmManager в качестве вэйклока. Здесь Вы можете увидеть пункты с большим количеством пробуждений. В некоторых случаях Вы ничего не сможете с этим сделать (Android System), но в других, Вы сможете деинсталировать приложения или отключить уведомления. Надеемся, это поможет в решении проблем с AlarmManager.
Просмотрите » Alarm Stats» внизу, это будет выглядеть примерно так:
com.levelup.beautifulwidgets
246776ms running, 10 wakeups
10 alarms: act=com.levelup.beautifulwidgets.ACTION_UPDATEWEATHER flg=0x4
1583 alarms: act=com.levelup.beautifulwidgets.ACTION_UPDATECLOCK flg=0x4
com.motorola.blur.datamanager.app
22ms running, 0 wakeups
1 alarms: act=com.motorola.blur.datamanager.app.checkin.timeout flg=0x4 cmp=com.motorola.blur.datamanager.app/.DataManagerCheckinService
ccc71.bmw
130743ms running, 1585 wakeups
1585 alarms: flg=0x4
com.motorola.kpilogger
2156ms running, 0 wakeups
13 alarms: act=com.motorola.kpilogger.START_LOG flg=0x4
com.gau.go.launcherex
528ms running, 10 wakeups
6 alarms: act=com.jiubang.intent.action.AUTO_CHECK_UPDATE flg=0x4
4 alarms: act=com.jiubang.intent.action.SCAN_APPS flg=0x4

Как Вы можете убедиться, в данном случае службами, вызывавшими AlarmManager, похоже, были BeautifulWidgets (обновлявшие часы при каждом изменении минут — 1583 сигналов: act=com.levelup.beautifulwidgets.ACTION_UPDATECLOC K flg=0x4).
Battery Monitor Widget (очевидно, получение информации о напряжении батареи) – 130743мс работы, 1585 пробуждений.
Вы также можете уменьшить количество событий AlarmManager, просто отключив местоположение, выйдя из аккаунта Google Talk, и отключив уведомления или обновления в приложениях, которые Вы не особо используете.
AlarmManager — это универсальный процесс, который используют МНОГИЕ приложения для обновления времени, уведомлений и т.д. Во большинстве случаях это является необходимостью, в других случаях, нужно действительно совершить проверку и отключить/удалить те приложения, которые слишком часто этот процесс вызывали.
Ссылки:
http://forum.xda-developers.com/showpost.p…p;postcount=861
http://developer.android.com/reference/and…armManager.html

AudioOut_1
AudioOut используется для воспроизведения уведомлений и системных звуков.
Известные действия: из настроек… меню -> звуки -> убрать галочки с пунктов «Звук нажатия», «Звук блокировки».
Известные условия возникновения: каждый раз при нажатии или блокировке экрана.

ConnectivityService
Служба, ответственная за передачу данных/точки доступа, установление и поддержание соединения. Вэйклок удерживается при переходе между способами передачи данных.
Известные действия: можно устранить, используя другой радиомодуль/модем, в условиях лучшего покрытия сети или при использовании только 2G.
Ссылки:http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.3_r1/com/android/server/ConnectivityService.java#ConnectivityService

deleted_wake_locks
В программном интерфейсе, доступном драйверам Андроид, предписывается выполнять комманду wake_lock_destroy перед освобождением памяти структуры вэйклоков, которую они создали. В большинстве своем это происходит при отключении, но также, в некоторых ситуациях, когда драйвер динамически выгружается из ядра. Когда бы это ни происходило, удаленные вэйклоки исчезают из списка, но их статистика добавляется в псевдо-вэйклок deleted_wake_locks. Это позволяет видеть, что ряд старых вэйклоков имеет комбинированный набор статистики, который демонстрирует этот пункт. Статистика данного пункта не увеличивается, пока дополнительные, действующие, вэйклоки, имеющие ненулевую статистику, не будут удалены.
Известные действия: так как это просто пункт, включающий сборную активность всех вэйклоков ядра, которые уже не существуют, делать что-либо напрямую, чтобы уменьшить данный вэйклок, нет необходимости. Лучшим способом действий будет идентификация вэйклоков, генерирующих активность, до того, как они будут удалены и отобразятся в данном пункте.
Известные условия возникновения:Драйвер Wifi – один из известных источников вэйклоков ядра, которые разрушаются при выгрузке драйвера (когда Wifi отключается вручную или в рамках запрограммированного отключения). Такие вэйклоки, как wlan_rx_wake и wlan_wake, когда драйвер выгружается, больше не показываются в списке и их статистика добавляется к имеющимся значениям deleted_wake_lock.
Ссылки:http://forum.xda-developers.com/showpost.p…;postcount=5644http://forum.xda-developers.com/showpost.p…;postcount=6671http://www.netmite.com/android/mydroid/cup…ower_Management

GTALK_ASYNC_CONN_com.google.android.gsf.gtalkservice.AndroidEndpoint
Вэйклок обнаруживается при определенных невоспроизводимых условиях, показывая большое количество вэйклоков и, в некоторых случаях, большое время. Поскольку причины точно неизвестны, нет гарантий, что вэйклок не случится по другим ещё неизвестным причинам.
Известные действия: в одном случае (см. ссылку) этот вэйклок был успешно удален при изменении прокси / создании новой точки доступа с пустым прокси. «Виновный» прокси был предустановлен провайдером Orange, но не исключено, что прокси-серверы других провайдеров могут иметь такой же эффект.
Сопутствующие вэйклоки: другие GTALK_ASYNC_CONN partial wakelocks
Ссылки: http://forum.xda-developers.com/showpost.p…;postcount=3416

mipi_link
Некоторые люди думают, что вэйклок как-то связан с камерами, но подтверждения этому. Альянс MIPI -это контора, занимающаяся разработками интерфейса мобильных устройств. Возможно, вэйклок удерживается каким-то произведенным этим альянсом чипом (на сайте, например, упоминаются некие процессоры приложений), который сообщается с каким-либо другим устройством (беспроводным модемом, например) посредством какой-то связи (link) .
Известные действия: единственное средство избавления от него — режим полета.
Известные условия возникновения: счетчик вэйколока увеличивается вне зависимости, включен wifi, или отключен, разрешена передача данных по мобильной сети, или запрещена, включена синхронизация или нет, 3g или только 2g, есть сим-карта в телефоне, или нет. Gtalk, Gmail, Facebook, Skype, Gallery на него не влияют, все эти приложения могут быть заморожены или деинсталированны, без разницы, вэйклок остается.
Ссылки:http://forum.xda-developers.com/showpost.p…postcount=15099

network-location
Служба network location service отвечает за обеспечение информацией об относительном местоположении для запрашивающих ее приложений.
Частота обновлений (и вэйклоков) зависит от точности данных, запрашиваемых приложениями (максимальное время между обновлениями, точность в метрах).
Примеры приложений, запрашивающих относительное местоположение: виджеты погоды, карты, большинство социальных инструментов, google+.
Действия по уменьшению вэйклоков:
• Найдите виновное приложение: просмотрите все вэйклоки network-location и и отметьте все приложения во второй строке списка
• Проверьте настройки приложения на предмет возможности изменения точности
• Используйте преимущества базового местоположения Wifi (стабильное местоположение, минимизурующее частоту обновлений)
• Поищите альтернативные приложения с более приемлемыми настройками
Известные условия возникновения: некорректные приложения с высокими требованиями к точности запускают службу Network Location.
Нестабильные сетевые условия (частый обменданными между вышками) могут вызывать обновления местоположения.
В некоторых случаях обновление радиомодуля/модема влияет на network location: местоположение основывается на информации вышки, поставляемой RIL.
Сопутствующие вэйклоки: LocationManagerService, NetworkLocationLocator, WifiService, GpsLocationProvider, network-location-cell-update
Ссылки:http://developer.android.com/guide/topics/location/obtaining-user-location.html
http://developer.android.com/reference/and…ionManager.html

PowerManagerService
Данный вэйклок ядра является меткой для всех частичных вэйклоков пользовательского поля.
Известные действия: используйте «Partial Wakelocks» для вычисления приложений/служб, вызывающих вэйклоки.
Известные причины возникновения: некоторые устройства показывают вэйклоки пользовательского поля в целом под меткой PowerManagerService.

suspend_backoff
suspend_backoff срабатывает при быстрых переходах сон-пробуждение-сон в короткие промежутки времени (10 раз в течение x ms IIRC). Когда это происходит, этот вэйклок убеждается в том, что устройство постоянно пробуждается на некоторое время вместо того, чтобы надолго изменить состояние. Счетчик вэйклоков ядра может дать информацию об источнике этих постоянных пробуждений, но точный ответ найти не удастся ввиду отсутствия показа распределения их времени.
Ссылки: В связи с Chrome: http://forum.xda-developers.com/showpost.p…mp;postcount=24
В связи с включением/отключением Wifi при включении/отключении экрана
http://forum.xda-developers.com/showpost.p…;postcount=6603

svnet
Базовое управление радиомодулем (специфичный для Galaxy S/S II).
Известные действия: нет прямых известных действий, может быть устранено заменой радиомодуля/модема.

svnet dormancy
svnet-dormancy является вэйклоком ядра, связанным с сотовой передачей данных – быстро это происходит, или нет, всегда срабатывает 6-тисекундный вэйклок каждый раз, когда радиомодуль передает данные.
Известные действия: изменить длительность вэйклока (применяйте на свой страх и риск). Уменьшить вэйклок путем уменьшения объема/количества запросов на передачу данных.
Причина – передача данных.

Sync
Служба sync отвечает за синхронизацию всех аккаунтов в секции «Настройки» — «аккаунты и синхронизация». Вэйклок удерживается, пока процессы синхронизации работают.
Чем больше пунктов синхронизируется и чем чаще синхронизация, тем больше будет вэйклок.
Потенциально, время вэйклока склонно к увеличению при плохой связи.
Примеры аккаунтов: twitter, google+, linkedin, google mail
Действия по уменьшению вэйклоков:
• Убрать ненужные аккаунты
• Проверить настройки и убрать ненужные опции (напр., синхронизация контактов)
• Проверить частоту синхронизации и убедиться, что Вы действительно нуждаетесь в данных установках
Известные условия возникновения: при плохих условиях связи, с наличием некорректно настроенных провайдеров синхронизации
Ссылки: известный баг, связанный с gmail: http://code.google.com/p/android/issues/detail?id=9307

SyncLoopWakeLock
SyncLoopWakeLock – это вэйклок, используемый Android SyncManager (android.content.SyncManager) и он работает, начиная с Андроида 4.01. Служба синхронизации отвечает всех аккаунтов в секции «Настройки» — «аккаунты и синхронизация». Вэйклок удерживается, пока процесс синхронизации работает.
Чем больше пунктов синхронизируется и чем чаще синхронизация, тем больше будет вэйклок.
Потенциально, время вэйклока склонно к увеличению при плохой связи.
Примеры аккаунтов: twitter, google+, linkedin, google mail
Действия по уменьшению вэйклоков:
• Убрать ненужные аккаунты
• Проверить настройки и убрать ненужные опции (напр., синхронизация контактов)
• Проверить частоту синхронизации и убедиться, что Вы действительно нуждаетесь в данных установках
Известные условия возникновения: вэйклок удерживается SyncManager при обработке действий синхронизации (метод handle()). Ранее данный вэйклок был известен, как sync.
При плохих условиях связи, с наличием некорректно настроенных провайдеров синхронизации, данный вэйклок удерживается дольше.
Сопутствующие вэйклоки: sync
Ссылки:https://github.com/asksven/BetterBatterySta…-Base/wiki/sync
Источники:новый вэйклок: http://grepcode.com/file/repository.grepco…ava#SyncManager
Старый вэйклок (*sync*):http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.3.7_r1/android/content/SyncManager.java#SyncManager.0SYNC_WAKE_LOCK

vbus_present
vbus_present является вэйклоком ядра, удерживаемым при подключенном ЗУ.
Известные действия: нет необходимости что-то делать.
Известные условия возникновения: при подключении к ЗУ/ заряжающему USB порту.

wlan_rx
Wifi чип получает откуда-нибудь пакет — на Galaxy S II, множество данных вэйклоков в сочетании с тем фактом, что что устройству требуются 650 мсек на возобновление работы после состояния ожидания и 150 на переход обратно в сон, означают, что получаемые пакеты wifi резко увеличивают потребление Android OS. В качестве экстремального примера, забейте в Линуксе следующую команду при политике отключения wifi «никогда» и посмотрите соотношения Вашего глубокого сна, расхода батареи и потребления ОС: ping -i 5 <wifi IP address of phone>
Известные действия: используйте анализатор пакетов для определения причины трафика.
Сопутствующие вэйклоки: wlan_wake

wlan_wake
Wifi чип пробудил процессор (обычно, это запускает и ведет к вэйклоку wlan_rx).
Известные действия: используйте анализатор пакетов для определения причины трафика.
Сопутствующие вэйклоки: wlan_rx

Оригинал

Поделиться ссылкой:

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *