Современные смартфоны и планшеты гораздо больше напоминают полноценный ПК, чем простое устройство для общения и получения информации. Теперь их оснащают четырехъядерными процессорами с частотой в 2 ГГц, гигабайтами оперативной памяти и Full HD экранами. Проблема только в том, что для питания всех этих мощностей используется не кабель от розетки, а небольшой аккумулятор, емкости которого редко хватает более чем на день. Что ж, давай посмотрим, как это исправить.
В статье я попробую разобраться, действительно ли современные смартфоны потребляют слишком много энергии и на самом деле им нужно намного меньше. Сначала рассмотрим методы сбережения энергии, которые уже применяются в операционной системе Android, и насколько сильно они позволяют снизить общие траты энергии. Затем попробуем применить популярные способы сохранить заряд батареи андроид, о которых часто говорят на форумах и пишут в блогах, и посмотрим на результат. В конце применим тяжелую артиллерию в виде таких методов, как андервольтинг и даунклокинг. Поехали.
Стандартные средства энергосбережения
Среди пользователей смартфонов витает миф о том, что на самом деле мобильные устройства должны жить гораздо дольше, чем сейчас, и настоящая проблема не в мощностях, а в головотяпстве разработчиков Android и iOS — якобы они просто не хотят оптимизировать ОС из-за лени или сговора с производителями железа, которым необходимо продавать гигагерцы и гигабайты. ОК, потратим свое время на чтение документации и попробуем разобраться. Итак, четыре мифа о том, почему Android съедает так много энергии.
- Java — тормоз, пожирающий процессор и память. Первое, что следует запомнить: в Android нет Java. Здесь используется регистровая виртуальная машина Dalvik, разработанная специально для embedded-устройств. О преимуществе регистровой ВМ в свое время уже писали разработчики Plan9/Inferno, и ссылка на их статью есть в конце. Если кратко, то регистровая ВМ отличается от классической стековой Java меньшими требованиями к оперативной памяти и меньшей избыточностью, то есть позволяет выполнять код быстро, не выжирая память. Второе: большая часть «тяжелого» кода (мультимедиакодеки, алгоритмы обработки графики, криптография и прочее) в Android написана на C, что позволяет исполнять его так же быстро, как в любой другой ОС. Dalvik-код используется преимущественно для определения логики приложений, а благодаря HotSpot JIT код внутри Dalvik выполняется не намного медленнее, чем код на Си.
- Android не умеет эффективно работать с оборудованием. Это полная ерунда. Android основан на ядре Linux, в котором код поддержки оборудования отшлифован если не до блеска, то близко к тому. В ОС реализовано множество техник оптимизации работы с оборудованием и энергосбережения, таких как отложенный сброс буферов на диск с объединением, грамотный планировщик задач и алгоритм энергосбережения процессора, эффективные алгоритмы энергосбережения для модулей Wi-Fi, 3G, LTE и Bluetooth (4.0 Low Energy), batch-метод опроса сенсоров (реализовано в 4.4 KitKat). Без всего этого Android-смартфон не прожил бы и пяти часов.
- Ядро Linux избыточно в мобильной технике. У ядра Linux очень гибкая система сборки, которая позволяет включить в результирующий образ только то, что реально нужно в конкретном устройстве. Ключевые подсистемы ядра от этого, конечно, не станут проще (по крайней мере базовый слой), во многом они слишком избыточны для условий мобильной техники, но это та цена, которую приходится платить за то, что Android вообще существует.
- ** Android слишком сложен и тяжел.** Вероятно, многие компоненты ОС можно серьезно оптимизировать или даже вовсе убрать (в исходниках много дублирующегося кода), и Google таки занялась этой работой с выпуском 4.4, однако не стоит ждать, что все эти оптимизации сколько-нибудь серьезно продлят жизнь смартфону. В конце концов, один день жизни гаджета был реальностью и во времена весьма простой и легкой версии 1.5.
[ad name=»Responbl»]
Главная «проблема» не только Android, но и всех современных мобильных ОС вовсе не в их тяжести и неоптимизированности, а в том, что современный смартфон — это уже не статичный гаджет вроде Nokia N95, который позволяет запустить аську и поиграть в сокобан, а система, живущая своей жизнью. Независимо от того, спит девайс или нет, он продолжает собирать почту, получать уведомления из календаря, Facebook, Instagram, ожидать звонки в Skype и синхронизировать файлы с облаком (так, например, делает приложение Dropsync). Вся эта работа не может не отразиться на времени работы от батареи, и именно в эту сторону следует смотреть, говоря о продлении жизни от аккумулятора.
Автоматизация
Для сохранения заряда аккумулятора настоятельно рекомендуется использовать приложения для автоматизации, такие как Tasker или Locale. С их помощью можно настроить автоматическое включение режима полета по ночам, отключение передачи данных при достижении определенного уровня заряда батареи, снижение яркости до минимума в вечернее время и многое другое. Практически любая софтина для экономии энергии из маркета может быть заменена этими инструментами, при том что ты будешь иметь полный контроль над происходящим.
Бессонница
Перед тем как перейти к рассказам о техниках оптимизации, я должен налить еще немного воды и рассказать о том, что такое wakelock и suspend. Как и любая мобильная ОС, Android работает по принципу «сохранить столько энергии, сколько возможно» и поэтому в любой момент стремится перевести процессор и другие компоненты устройства в энергосберегающий режим. Такой механизм работы позволяет устройству отдавать процессорные ресурсы приложениям по мере необходимости, а все остальное время находиться в режиме низкого потребления энергии. Когда пользователь нажимает кнопку выключения и экран гаснет, Android переводит смартфон в режим suspend, отключая процессор и оставляя напряжение только на оперативной памяти (аналог ACPI S3). Таким образом удается добиться еще большей экономии, которая при определенных условиях может достигать 99%.
Чтобы уже запущенные приложения, которые должны продолжать работу даже после выключения экрана (музыкальный плеер, синхронизация файлов и прочее), не замораживались вместе с уходом в suspend, используется механизм под названием «частичный wakelock». Работает он очень просто: пока есть приложения, установившие wakelock, девайс не уйдет в suspend и приложения смогут нормально работать. В дополнение приложения могут использовать AlarmManager, который позволяет выводить устройство из suspend в нужные моменты с целью выполнения определенной работы (так делают виджеты, например). AlarmManager тоже использует wakelock для удержания процессора в режиме бодрствования.
[ad name=»Responbl»]
Злоупотребление этими механизмами может привести к избыточному расходу энергии независимо от того, в каком режиме работы находится гаджет. К счастью, имея root, информацию о статистике использования wakelock’ов получить довольно просто. Самый удобный способ — с помощью Wakelock Detector. Это бесплатное приложение, которое показывает общее количество wakelock’ов с сортировкой по приложениям.
Взглянем, например, что показывает Wakelock Detector на моем Nexus 4 (скриншот Wakelock Detector). Самая первая строка экрана — это общее время бодрствования устройства за один день и шесть часов (с момента полной зарядки). Пять самых прожорливых приложений — это Dropsync, OnLive, Google Поиск, Gmail и Carbon. Все вместе они держали смартфон в режиме бодрствования почти час, а это очень много.
К сожалению, ни одно из этих приложений я удалять не хочу, и поэтому мне придется выяснить, для каких конкретно целей они использовали wakelock, и попробовать исправить эту проблему с помощью настроек самих приложений. Нажимаем на Dropsync и видим, что он ставил wakelock с тегом DropsyncWakeLock 15 раз (что в сумме привело к 32 минутам бодрствования) и один раз AlarmManager (2 секунды). Что такое AlarmManager, мы уже знаем, а вот DropsyncWakelock более интересен. Программист вправе давать произвольные имена wakelock’ам, но нетрудно предположить, что этот используется для выполнения автоматической синхронизации с Dropbox (Dropsync предназначен именно для этого). Мне постоянная синхронизация не особо нужна, и я могу запускать ее самостоятельно. Поэтому я просто иду в настройки Dropsync и отключаю автоматическую синхронизацию. Вуаля, телефон просыпается реже и не на такие длинные промежутки времени.
OnLive можно пропустить, так как 18 минут бодрствования были вызваны некорректным закрытием приложения (из него надо выходить по всем правилам). Далее идет «Google Поиск», приложение, которое, кроме всего прочего, включает в себя Google Now. Тапаем по нему и видим, что два самых активно используемых wakelock’а — это NlpWakeLock и EntriesRefresh_wakelock. Это уже сложнее, и разобраться, что же на самом деле происходит при их установке, довольно сложно. Поэтому долго удерживаем палец на имени wakelock’а, выбираем «Поиск» и смотрим, что нашел браузер. Уже на второй найденной странице есть пояснение, что NlpWakeLock устанавливается в тот момент, когда изменяется положение смартфона относительно сети (3G, Wi-Fi), после чего Google Now отправляет информацию о местоположении на сервер. Второй wakelock, судя по всему, используется для обновления карточек в Google Now. Одновременно решить проблему прожорливости в обоих случаях можно, просто отключив «Google Поиск» в «Настройки -> Приложения -> Все». Для решения первой — выключить определение местоположения в настройках Android.
Gmail заставляет смартфон бодрствовать с помощью wakelock’а с говорящим названием sync/gmail-ls/com.google/zobnin@gmail.com. Очевидно, что он устанавливается на время автоматической синхронизации почты, поэтому понизить энергозатраты можно, просто отключив синхронизацию Gmail в «Настройки -> Аккаунты -> Google -> zobnin@gmail.com». С другой стороны, делать этого я не хочу и лучше потерплю три минуты бодрствования за полтора дня.
Типичные советы
Пройдя по списку самых энергозатратных приложений с помощью Wakelock Detector, легко понять, что основные причины пробуждения устройства — это разные виды синхронизации и регулярное обновление информации о местоположении. Это значит, что, отключив эти функции полностью, можно избавиться от большинства случаев пробуждения и серьезно сэкономить батарею.
Я бы рекомендовал сперва зайти в настройки Google-аккаунта («Настройки -> Аккаунты -> Google -> user@gmail.com») и аккаунтов других приложений и отключить все ненужные виды синхронизации. Мне, например, не нужны синхронизация календаря, стандартного браузера, контактов Google+ и «данных приложений», так что я могу спокойно избавиться от них. Так же следует поступить и со всеми остальными зарегистрированными на смартфоне аккаунтами, а в настройках сторонних приложений отключить автоматическую синхронизацию (тебе действительно нужна автосинхронизация Twitter и RSS?). Редко используемые приложения лучше удалить вовсе.
[ad name=»Responbl»]
Последние версии Android не позволяют отключить определение местоположения полностью, но зато могут использовать очень консервативный и почти не влияющий на жизнь смартфона режим под названием (сюрприз!) «Экономия заряда батареи», который обновляет информацию только тогда, когда происходит подключение к Wi-Fi-сети или переход на другую сотовую вышку.
Если приложение садит аккумулятор, а удалять его нельзя и в настройках нет опций синхронизации или автообновления, то его можно просто заморозить. Делается это с помощью великолепного приложения под названием Greenify. Оно подавляет возможность приложения просыпаться самостоятельно и заставляет его работать только тогда, когда ты сам этого захочешь. Пользоваться очень просто. Запускаем Greenify, нажимаем на кнопку + в левом нижнем углу и видим, какие приложения дольше всего работают в фоне. На скриншоте видно, что наиболее прожорливые — это OTransfer Target, используемый для удаленного включения переадресации (оно вообще постоянно бодрствует), а также Beautiful Widgets и Carbon, которые периодически просыпаются для разного рода синхронизаций. OTransfer Target я ставил для теста, так что могу спокойно его удалить (оно, кстати, также есть в числе «лидеров» в Wakelock Detector). Beautiful Widgets просыпается для обновления виджета на рабочем столе, поэтому его я оставлю в покое. А вот Carbon, занявший пятое место по версии Wakelock Detector, можно заморозить. Для этого достаточно просто тапнуть по имени и нажать галочку в правом верхнем углу.
Пять вредных советов по энергосбережению
- Убийство фоновых процессов с помощью таск-киллера. Одна из самых глупых идей из всех, что только могут прийти в голову. Следует просто запомнить: фоновые процессы не потребляют энергию, обычно ее потребляют запущенные ими сервисные службы, которые либо вообще не убиваются таск-киллерами, либо имеют способность к самовоскрешению. А вот убийство самих фоновых приложений приводит к необходимости их повторного запуска, на что энергия таки тратится.
- Отключение Wi-Fi дома. В энергосберегающем режиме (когда смартфон спит) модуль Wi-Fi потребляет очень мало энергии, настолько мало, что на включение и выключение модуля зачастую расходуется гораздо больше. Имеет смысл разве что на планшете, который берешь в руки два-три раза в день, чтобы почитать новости или книгу.
- Автоматическое переключение между 2G и 3G. Аналогичная история. При скачках между типами сетей происходит повторный поиск вышек и повторное же соединение, а в это время радиомодуль работает на полную мощность. Приложения, автоматически включающие 2G во время сна, почти всегда приводят к еще большему расходу энергии.
- Приложения с названиями вроде Ultimate Battery Saver. В 99% (если не в ста) случаев это либо плацебо, либо все тот же таск-киллер, снабженный механизмом, который отключает разные компоненты смартфона при достижении определенного уровня заряда. Сначала происходит перевод на 2G и отключение GPS, затем отключается интернет, а под самый конец телефон переводится в режим полета. Проблема здесь в том, что описанный механизм работы скорее мешает и все это удобнее сделать самому в нужное время.
- Калибровка батареи с помощью рекавери. С давних пор существует миф о том, что удаление файла /data/system/batterystats.bin с помощью CWM приводит к сбросу настроек батареи, так что она начинает показывать «более правильный» уровень заряда. Миф настолько въелся в умы, что некоторые индивидуумы начали делать «калибровку» ежедневно, заявляя, что так можно продлить жизнь батареи и даже повысить ее емкость. На самом деле файл нужен для сохранения статистики использования энергии (той самой инфы из «Настройки -> Батарея») между перезагрузками и ни на что не влияет.
Андервольтинг
Теперь поговорим о тяжелой артиллерии. Ни для кого не секрет, что один из самых прожорливых компонентов смартфона — это процессор. Его энергопотребление может быть даже больше потребления экрана (а точнее, его подсветки), и все потому, что он работает на очень высоких частотах, которые требуют подачи высоких напряжений. Поначалу может показаться, что сохранить жизнь от батареи в этом случае можно, просто понизив максимальную частоту работы процессора и отключив «лишние» ядра. Однако, скорее всего, это ни к чему не приведет: несмотря на пониженное потребление энергии, процессор будет исполнять код дольше, и в конечном счете энергопотребление может даже возрасти.
Вместо этого следует провести операцию андервольтинга, то есть просто понизить максимальное подаваемое напряжение для всех возможных частот. Для этого необходимо установить кастомное ядро с поддержкой данной функции. О том, как это сделать и какое ядро выбрать, я во всех подробностях рассказывал в одном из предыдущих номеров журнала, поэтому не буду повторяться, а просто скажу, что если у тебя один из нексусов, то достаточно установить franco.Kernel updater и с его помощью скачать и установить ядро. Все происходит в автоматическом режиме.
Далее устанавливаем платную версию Trickster MOD (бесплатная не сохраняет настройки напряжений) или CPU Adjuster; для ядер franco также подойдет платный franco.Kernel updater. Переходим на страницу регулировки вольтажа (в Trickster MOD нужные настройки находятся внизу четвертой страницы) и начинаем аккуратно убавлять по 25 мВ для каждой из возможных частот процессора. После убавления сворачиваем приложение и некоторое время тестируем смартфон, запуская тяжелые приложения, затем снова убавляем и снова тестируем.
В 90% случаев процессор без всяких последствий выдержит понижение на 100 мВ, а это даст нам дополнительный час-два в режиме активного использования. Если тебе повезет, то процессор сможет выдержать и –150, а в особо счастливых случаях даже –200, все зависит от партии процессора и конкретного экземпляра. Слишком сильное занижение напряжения приведет к перезагрузке, после которой достаточно будет поднять напряжение на 25 мВ и сохранить значение в дефолтовом профиле (в Trickster MOD это кнопка «Профиль» сразу над значениями).
Смартфон с AMOLED-экраном будет работать дольше, если использовать приложения с черным фоном. Чтобы сделать системные приложения темными, можно использовать прошивку AOKP или один из модулей Xposed.
Зачастую механизм автоматической регулировки яркости экрана выставляет слишком высокие значения. Если управлять яркостью вручную, можно продлить жизнь смартфона еще на пару часов.
Продвинутые функции фирменных прошивок некоторых производителей смартфонов, такие как управление жестами, голосовое управление или автоматическое включение экрана, приводят к чрезмерному расходу заряда аккумулятора. По возможности их следует отключить.
Вместо выводов
В целом описанные в статье методы могут продлить жизнь от батареи как минимум на полдня (при средней интенсивности использования), а при тотальном отключении всех видов синхронизации и удалении ненужных приложений — еще больше. Выполнить рекомендации не трудно, а эффект значительный.
Ссылки:
- Trickster MOD: goo.gl/rws8vq
- CPU Adjuster: goo.gl/6btoc0
- franco.Kernel updater: goo.gl/ROg9Cg
- Роб Пайк о дизайне регистровой виртуальной машины: goo.gl/hBlyQc
6 comments On Как сохранить заряд батареи андроид
Pingback: 10 потрясающих твиков Android с помощью Tasker. - Cryptoworld ()
Pingback: 15 хитростей в настройке андроид, что пригодятся всем. - Cryptoworld ()
Pingback: Энергопотребление андроид - увеличиваем автономную работу на 50% - Cryptoworld ()
Heyder
WSmart 444
Pingback: Энергопотребление андроид - увеличиваем автономную работу на 50% - Cryptoworld ()