Главная » 2017»Октябрь»26 » Продлеваем работу смартфона: отключение wakelock без root
08:01
Продлеваем работу смартфона: отключение wakelock без root
Продлеваем работу смартфона: отключение wakelock без root
Вы наверняка замечали, что смартфоны начинают разряжаться заметно быстрее спустя каких-то пару месяцев после покупки. В наихудшем случае вы можете получить полностью разряженный гаджет на утро или 15-20% заряда аккумулятора к концу рабочего дня при считанных минутах работы дисплея. И дело здесь вовсе не в батарее, а в установленных приложениях, которые препятствуют уходу смартфона в экономичный спящий режим. Выявить пожирателей батарейки и умерить их аппетиты даже без root-доступа вам поможет наша статья.
На сколько вырастет автономность?
Вопрос, который, скорее всего, сразу возник у вас в голове: «а какой, собственно, прирост автономности даст выполнение этой инструкции?». Всё зависит от того, какие именно приложения установлены у вас на гаджете. Если вы только купили смартфон и успели установить на него только пару-тройку программ, то, скорее всего, никакого прироста не будет. Но, если у вас десятки программ, добрая половина из которых выполняет какие-то действия пока гаджет спит, разница может быть вполне заметной. Так, в нашем случае, наиболее активными программами, не дававшими смартфону заснуть, оказались VoIP-приложение от Tele2, клиент Dropbox с автоматической синхронизацией фотографий и Wearable Widgets. После остановки этих программ разница в разряде смартфона за примерно одинаковое время составила примерно 8%.
Что такое wakelock?
Android построена на ядре Linux, благодаря чему предлагает самые широкие возможности как обычным пользователям, так и любителям копаться в системе. В отличие от ОС для компьютеров, которые переводят устройства в энергоэффективный спящий режим после длительного бездействия, Android предназначен для устройств, большую часть времени находящихся в «спячке». Ради увеличения автономной работы Android-устройства при любой возможности должны переходить в экономичный режим. Но когда приложения выполняют важные действия, система не должна уходить в сон. Для этого был придуман механизм wakelock’ов. К сожалению, он и стал основной причиной слабой автономности Android-устройств.
Полный список потенциальных пожирателей батареи и время их активности сохраняются в логах Android. Их можно просмотреть с помощью инструмента Battery Historian
Нажимая кнопку питания работающего смартфона, вы переводите его в режим Suspend, аналог режима ACPI S3 на настольных компьютерах — или, попросту говоря, в спящий режим. При переходе в Suspend полноценным потребителем энергии остаётся только оперативная память, которая хранит весь системный контент, а остальные компоненты работают в дежурном режиме, потребляя минимум энергии. Благодаря этому энергопотребление в Suspend может составлять всего 1% от номинального. Это актуально для планшетов, но в смартфонах приходится держать включенным ещё и радиомодуль — иначе гаджет не сможет принимать звонки.
Именно так всё должно работать в идеальном мире. Но где он, тот идеальный? В реальном же на сцену выходит механизм wakelock, из-за которого наши гаджеты почти никогда не «спят» полноценно. С английского имя этого деятеля переводится как «прерывание сна». Данное событие может быть вызвано либо ядром системы (Kernel Wakelock, KWL), либо пользовательским приложением (Partial Wakelock, PWL). Последние часто также называют «частичными wakelock». Причины могут быть самыми разными. Среди KWL вы наверняка увидите «будильники», связанные с Wi-Fi и сотовой сетью, а среди PWL — события фоновой синхронизации различных программ.
Battery Historian показывает причины и длительность wakelock’ов. Так, на скриншоте видно, что сервисы Facebook стали причиной пробуждения смартфона почти на три минуты
Когда отключение может навредить
Справедливости ради отметим, что за многие годы работы над механизмом wakelock Google удалось научить Android бережно относиться к батарее, поэтому основной целью для нас будут частичные wakelock, вызываемые сторонним ПО. Именно они злостно пожирают заряд аккумулятора, особенно при большом количестве установленных программ.
Важно понимать, что именно частичные «будильники» (PWL) часто становятся причиной wakelock’ов ядра. Поэтому бездумное отключение вызовов вэйклоков ядра вместо борьбы с источниками частичных не только не улучшит автономность смартфона, но и может стать причиной быстрого разряда аккумулятора. Наглядный пример: отключение Wi-Fi при большом количестве wakelock’ов под названием wlan_rx_wake заставит приложения, запрашивающие передачу данных, делать это через сотовую сеть. Даже при отсутствии соединения с ней это вызовет более частые просыпания гаджета — и, как следствие, большее энергопотребление.
Однако и с отключением «будильников» от обычных приложений стоит быть внимательным. Если речь идёт о мессенджере или другой подобной программе, вы рискуете не получить важное сообщение или уведомление. При выполнении этой инструкции стоит выяснить и точно понять, какие именно последствия вызовут те или иные действия.
Инструкция по отключению
Главный инструмент в борьбе с программами-источниками wakelock’ов — приложение BetterBatteryStats, которое хоть и платное, но стоит каждой потраченной на него копейки. Дополнительную информацию и тонкости работы с приложением можно узнать на нашем форуме.
Для того, чтобы программа могла работать без root-прав, нам потребуется дать ей некоторые системные разрешения вручную. Для этого на ПК придётся установить adb (Android Debug Bridge) — утилиту для взаимодействия с Android-устройствами. Её можно загрузить в составе пакета Platform Tools с официального сайта Android.
Шаг 1. Подготовка adb. Разархивируйте Platform Tools в любую папку на компьютере и перейдите в неё в Проводнике. После этого откройте командную строку Windows. Для этого кликните правой кнопкой мыши по пустому месту в окне Проводника с зажатой клавишей Shift и выберите пункт «Открыть окно команд». Для запуска консольной программы из командной строки Windows достаточно ввести её название (в нашем случае — adb). Если вы используете командную оболочку PowerShell, для запуска приложения потребуется указать к нему относительный путь, например, .\adb.
Шаг 2. Подключение смартфона к ПК через adb. Для управления смартфоном с компьютера необходимо разрешить работу adb на самом гаджете. В настройках аппарата найдите пункт «Об устройстве», внутри которого семь раз коснитесь пункта «Номер сборки».
На главном экране настроек появится новый раздел «Для разработчиков», в котором нужно найти и активировать пункт «Отладка по USB».
Для проверки работы adb в консоли введите команду
adb devices
Если всё сделано правильно, в появившемся списке вы увидите своё устройство.
Сразу после ввода команды на смартфоне появится всплывающее окно, в котором необходимо поставить галочку «Всегда разрешать отладку с этого компьютера», а затем нажать кнопку ОК.
Шаг 3. Предоставление системных разрешений. Теперь самое время дать приложению BetterBatteryStats системное разрешение для доступа к данным батареи. Это делается всего одной командой, которую необходимо ввести в консоль:
adb -d shell pm grant com.asksven.betterbatterystats android.permission.BATTERY_STATS
Если всё прошло правильно, вы не увидите вывода команды в консоли (курсор просто переместится к следующей строке), а в самой BetterBatteryStats пропадёт надпись «Нет доступа к вэйклокам ядра» при выборе категории Kernel Wakelock.
Шаг 4. Анализ wakelock’ов. После установки BetterBatteryStats и предоставления ей разрешений программе может понадобиться некоторое время для сбора статистики. Для этого просто пользуйтесь смартфоном в штатном режиме несколько часов. Когда будет собрана достаточная статистика, запустите приложение и выберите режим отображения Partial Wakelock. Из скриншота видно, что смартфон работал автономно чуть больше часа, и 25 минут из этого часа аппарату не давал заснуть клиент Dropbox. Нетрудно догадаться, что спустя сутки именно эта программа станет основной причиной разряда аккумулятора, когда смартфон находится в спящем режиме.
Шаг 5. Отключение wakelock’ов через adb. В большинстве приложений проблему с активной генерацией «будильников» можно решить, не залезая вглубь системы. Для этого нужно прикинуть, какая из настроек программы может вызывать нежелательное поведение. В случае с Dropbox это автоматическая синхронизация фотографий с облаком.
Более радикальный способ — удаление программы, которая вэйклоки вызывает. Именно так проще всего избавиться от разряда батареи клиентом Facebook и его мессенджером.
Если же изменение настроек программы результатов не принесло, но и отказываться от приложения вы не готовы, можете попробовать отключить wakelock’и от него вручную. Для этого сперва понадобится узнать название пакета. Чтобы сделать это, достаточно нажать на иконку программы в списке BetterBatteryStats. Так, из скриншота ниже видно, что полное название пакета Dropbox — com.dropbox.android.
Теперь, чтобы запретить программе генерировать wakelock’и, достаточно ввести в консоль adb следующую команду, подставив нужное название пакета:
adb -d shell cmd appops set название_пакета WAKE_LOCK ignore
В нашем случае команда будет выглядеть так:
adb -d shell cmd appops set com.dropbox.android WAKE_LOCK ignore
Важно отметить, что попытки программ вызвать wakelock’и по-прежнему будут отображаться в BetterBatteryStats, но фактического влияния на устройство они больше оказывать не будут.
Шаг 5. Альтернативный способ: отключение wakelock’ов через GUI. Если вы хотите за один раз навести порядок в своём смартфоне, не обязательно вводить команды adb: всё можно сделать и с помощью бесплатных мобильных приложений App Ops и Shizuku Manager. Первым делом запустите Shizuku Manager и отправьте на смартфон следующую команду:
adb shell sh /sdcard/Android/data/moe.shizuku.privileged.api/files/start.sh
В зависимости от модели смартфона она может выглядеть по-разному, поэтому лучше свериться с текстом, который Shizuku Manager показывает в главном окне. Если всё сделано правильно, на вашем смартфоне будет запущен собственный сервер adb, который позволяет выполнять команды с повышенными привилегиями в обход ПК.
Теперь запустите App Ops и согласитесь с настройками по умолчанию. Если adb сервер был запущен, вы увидите список программ, установленных на смартфоне.
После этого вам останется только найти в списке нужную программу и запретить ей отключение спящего режима, а, при желании, ещё и работу в фоновом режиме.
Борьба с другими причинами пробуждения смартфона
Не все wakelock’и стоит отключать сторонними методами. О некоторых стандартных способах борьбы с ними (например, изменением настроек приложений) мы уже упомянуль, но хотим вам предложить ещё несколько действенных методов.
1. Не используйте таск-киллеры. Если приложение посчитает, что не завершило свою работу, оно всё равно вызовет вэйклок и запустится снова, потратив ещё больше заряда. Единственное исключение — Greenify, который использует достаточно продвинутые алгоритмы завершения работающих в фоне программ и не снижает время автономной работы смартфона. Но для продвинутых функций этого приложения понадобятся права root.
2. Выключайте услуги местоположения. Помимо множества сторонних программ доступ к местоположению постоянно требуют и сервисы Google. Поэтому, когда вам не нужно определение местоположения напрямую (например, во время навигации), отключайте эту услугу. К счастью, сделать это в современных смартфонах очень просто — достаточно нажать на соответствующую иконку в панели уведомлений.
3. Оптимизируйте работу программ в фоне. Помимо непосредственно приложений, которые вы видите на экране, программы для Android могут запускать различные службы для выполнения фоновых задач. Подробно о том, как службы влияют на автономность смартфона, и как оптимизировать их энергопотребление, вы можете узнать в нашей статье Правда или нет? Фоновые приложения нужно закрывать.
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]
Волк слабее льва и тигра, но в цирке волк не выступает!
Волк - единственный из зверей, который может пойти в бой на более сильного противника.
Если же он проиграл бой, то до последнего вздоха смотрит в глаза противника. После этого умирает...
Администратор сайта laptop.ucoz.ru не несет ответственности за содержание рекламных объявлений. Все используемые на сайте зарегистрированные товарные знаки принадлежат своим законным владельцам! Используемая со сторонних источников информация публикуется с обязательными ссылками на эти источники.