Блокировка сна для Android. Как отключить засыпание экрана в приложениях на Android Смартфон не уходит в спящий режим

На многих смартфонах и планшетах под управлением Android экран отключается через 30 секунд бездействия пользователя. Как правило, это оптимальный вариант, при котором можно комфортно пользоваться устройством и экономно расходовать заряд его батареи. Но бывают моменты, когда необходимо отключить спящий режим при работе какого-либо приложения. Так как штатными средствами Android сделать это невозможно, мы расскажем, как это реализовать другими способами.
Для начала, давайте определимся, зачем нам может понадобиться отключать тайм-аут экрана, ведь лишнее время работы экрана приводит к быстрой разрядке аккумулятора? Например, вы читаете статью в браузере или смотрите видео в YouTube, делаете паузу и через минуту ваше устройство уже спит крепким сном. Или другой вариант – вы используете смартфон в качестве пульта управления или демонстрируете слайды. Таким образом, самыми распространенными случаями, когда требуется постоянно активный экран, являются:

  • чтение электронных книг, документов, другой текстовой информации;
  • просмотр фото- и видеоматериалов;
  • демонстрация чего-либо на экране смартфона;
  • игры, геймплей которых не требует активных действий;
  • работа с GPS и картографическими программами.
Некоторые программы и игры отлично справляются с этой задачей самостоятельно. Обычно, во многих читалках, видеоплеерах и других приложениях в настройках есть опция, препятствующая засыпанию устройства. Но далеко не во всех. В таких случаях проще всего в системных настройках выставить более длительный тайм-аут экрана для активного режима. Но, согласитесь, это даже не столько неудобно, сколько нерационально. Поэтому мы поступим по-другому и будем использовать сторонние средства для тонкой настройки блокировки экрана.

Способ 1. Модуль Xposed

Этот способ требует наличие на устройстве и установленной специальной среды выполнения . Модуль, который нам необходимо подключить к Xposed Framework, называется Stay Awake – Keep On Screen . Он позволяет легко отключать блокировку экрана на определенных приложениях и возвращаться к предыдущим настройкам тайм-аута экрана.

Как загрузить и установить Stay Awake – Keep On Screen:

  1. Запустите приложение и выберите раздел «Загрузка».
  • Воспользуйтесь поиском, чтобы найти модуль Stay Awake – Keep On Screen.

  • На странице модуля перейдите к вкладке «Версии» и загрузите его последнюю версию.
  • Установите модуль и перезагрузите устройство.
  • Снова запустите Xposed Installer и зайдите в раздел «Модули». Убедитесь, что вы активировали модуль, поставив галочку напротив Stay Awake – Keep On Screen.

  • Перезагрузите устройство.
  • После всех этих действий можно использовать функцию включения/отключения спящего режима на системном уровне для каждого приложения. Работает это очень просто. Чтобы запретить экрану отключаться, просто зажмите обе кнопки громкости в любом активном приложении. Вы увидите надпись «Stay Awake Enable» – это означает, что экран в текущем приложении будет включен постоянно.



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

    Способ 2. Приложения

    Это приложение в русскоязычном Google Play известно под названием «Негаснущий экран». Маленькая утилита с приятным дизайном имеет одну единственную функцию – не давать устройству переходить в спящий режим при работе выбранных приложений. Чтобы ее активировать, просто запустите Keep Screen On и отметьте необходимые приложения, во время работы которых вы хотите оставить экран постоянно включенным.





    Stay Alive! имеет несколько режимов работы:

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

    Стоит признать, Stay Alive! выполняет свою основную задачу на 5+. Приложение не просто запрещает устройству уходить в спящий режим, а предлагает индивидуальные настройки для различных условий. Например, можно запретить экрану выключаться при зарядке, при подключении к автомобильной док-станции или вообще полностью отключить тайм-аут экрана. Помимо этого, Stay Alive! может приостанавливать свое действие, когда заряд батареи достигает заданного процента.

    Среди дополнительных функций есть очень полезная опция «Allow the screen to dim», которая позволяет затемнять экран, но не выключать его полностью.


    Единственный недостаток Stay Alive! – это платные функции, самой важной из которых является автозагрузка приложения. Так что, если вы пользуетесь бесплатной версией, вам придется каждый раз после включения/перезагрузки устройства вручную запускать утилиту.

    А как вы настраиваете тайм-аут экрана вашего мобильного устройства? И приходилось ли вам запрещать экрану отключаться в определенных программах?

    Christopher Bird

    Управление питанием в операционной системе Android - блокировка сна

    Наверное, многие сталкивались с ситуацией, когда мобильное устройство не может отработать на одной зарядке аккумулятора в течение полного дня. Каждый понимает всю неприятность ситуации, когда к концу рабочего дня телефон превращается в бесполезный кирпич. Современные приложения дают возможность выполнять на смартфонах задачи, для которых раньше требовался компьютер. Но если сравнивать смартфоны с PC, то из-за существенно меньшего размера, они отличаются и существенно меньшей емкостью аккумуляторов. Таким образом, телефон должен обладать, по сути, функциональностью ноутбука, но при этом - и это очень строгое требование - должен работать от аккумулятора без подзарядки в течение достаточно долгого времени.

    В Android и в других мобильных ОС удалось добиться длительной работы от аккумулятора за счет использования агрессивной модели управления питанием. Через некоторое время после использования телефона его экран отключается, а CPU переходит в режим пониженного потребления электроэнергии. Таким образом, когда телефон не используется, энергия расходуется совсем понемногу. Благодаря такому подходу, телефоны в режиме ожидания могут работать без подзарядки в течение нескольких дней. Диспетчер электропитания Android построен на следующем, вполне логичном принципе: при отключении экрана отключается и CPU.

    Но разработчики Android предусмотрели возможность не давать устройствам с этой ОС переходить в спящий режим. В некоторых случаях может потребоваться, чтобы CPU оставался в активном состоянии даже при выключенном экране, или же может понадобиться запретить автоматическое отключение экрана при выполнении определенных задач. Для этой цели разработчики Google* включили так называемые блокировки сна в API PowerManager. Приложения, которым нужно избежать «засыпания» устройства, могут воспользоваться такой блокировкой. Пока в системе есть активная блокировка сна, устройство не сможет «заснуть», то есть перейти в режим ожидания (до снятия блокировки). При использовании блокировок сна важно понимать, что необходимо правильно снимать эти блокировки, когда они не нужны. Иначе аккумулятор устройства быстро сядет: ведь устройство не сможет вернуться в состояние пониженного расхода электроэнергии.

    В этой статье описываются некоторые приложения Android, использующие блокировки сна в Android 4.0. В статье также описано приложение «Wakelocks» из набора SDPSamples для демонстрации реализации блокировок сна в коде.

    Использование блокировок сна приложениями

    В системе Android можно увидеть, какие службы удерживают блокировки сна и не дают системе перейти в один из режимов экономии электроэнергии. Файл file /proc/wakelocks на устройстве содержит список служб и драйверов, использующих блокировки сна. Отслеживая содержимое файла /sys/power/wake_lock (требуется доступ с правами root), можно узнать, есть ли блокировка ресурсов CPU, и какая служба удерживает блокировку wakelock2. Мне удалось зафиксировать несколько случаев использования блокировок на моем смартфоне Galaxy Nexus под управлением Android 4.0:

    Таблица: Использование блокировок сна стандартными приложениями Android

    Приложения YouTube и Музыка являются хорошими примерами использования блокировок сна на различных уровнях. Приложение YouTube захватывает блокировку сна, когда пользователь просматривает потоковое видео. В течение всего воспроизведения видео экран остается включенным (невзирая на установленные в системе параметры экрана). Но если во время воспроизведения пользователь нажмет кнопку питания, то устройство перейдет в режим сна: экран будет отключен, а воспроизведение звука и видео прекратится. Приложение «Музыка» использует другую блокировку сна при воспроизведении аудио. Параметры экрана не изменяются, поэтому экран устройства отключится согласно настроенным параметрам. Но даже при отключенном экране блокировка сна не даст отключиться CPU, чтобы воспроизведение музыки продолжалось, даже если пользователь нажмет кнопку питания.

    Выбор типа блокировки

    Перед тем, как начать написание кода блокировок сна, нужно понять, какие существуют типы блокировок сна, чтобы выбрать наиболее подходящий тип для использования в приложении. В API Android PowerManager описываются различные доступные флаги блокировок, изменяющие состояние электропитания устройства:

    Значение флага CPU Экран Подсветка клавиатуры
    PARTIAL_WAKE_LOCK Вкл Выкл Выкл
    SCREEN_DIM_WAKE_LOCK Вкл Затемнен Выкл
    SCREEN_BRIGHT_WAKE_LOCK Вкл Полная яркость Выкл
    FULL_WAKE_LOCK Вкл Полная яркость Полная яркость

    Таблица: Из API Android PowerManager.

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

    Приложение, использующее блокировку сна, должно запросить особое разрешение для этого. Для этого применяется разрешение android.permission.WAKE_LOCK в файле манифеста приложения. Это означает, что даже при установке пользователем приложения с блокировками сна с помощью Google Play, пользователи получат предупреждение о том, что данное приложение содержит компоненты, которые могут не дать телефону «заснуть». Если требуется запретить затемнение экрана при определенном действии приложения, это можно сделать и способом, для которого не нужно особое разрешение. В WindowManager есть переменная FLAG_KEEP_SCREEN_ON, которую можно задать, если методу View приложения нужно оставить экран во включенном состоянии. Для управления экраном рекомендуется использовать именно такой подход, поскольку его воздействие происходит только внутри приложения. При переключении пользователя к другому приложению WindowManager снимает блокировку сна.

    Удержание экрана во включенном состоянии (из набора SDPSamples)

    Приложение WakeLock из набора SDPSamples демонстрирует, что приложение может удерживать экран во включенном состоянии с помощью Window Manager, без написания кода блокировки сна. Запустите приложение WakeLock и выберите элемент списка "Win Man Screen On".

    Пока в строке состояния кнопки будет текст «Screen is LOCKED», экран будет включен. Если же в строке состояния кнопки будет текст «Screen is UNLOCKED», то через 5 секунд бездействия экран отключится.

    В коде это осуществляется функцией screenLockUpdateState() в файле WakeLockActivity.java путем установки и снятия FLAG_KEEP_SCREEN_ON для текущего окна при каждом нажатии кнопки и изменении состояния.

    Public void screenLockUpdateState() { if (mIsDisplayLocked) { ... // update display state getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } else { ... // update display state getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); } }

    Реализация блокировки сна

    В приложение WakeLock из набора SDPSamples реализованы блокировки сна различных типов. После запуска приложения WakeLock выбираем один из 4 типов блокировок сна: Power Wake Lock Full, Power Wake Lock Bright, Power Wake Lock Dim и Power Wake Lock Partial. Эти 4 варианта соответствуют 4 флагам блокировок сна, описанным в API PowerManager. Каждый элемент демонстрирует реакцию устройства на попытку отключить экран через 5 секунд.

    Отслеживая содержимое файла /sys/power/wake_lock (требуется доступ с правами root), можно увидеть, что после нажатия кнопки питания сохраняется только блокировка сна PARTIAL_WAKE_LOCK . Остальные блокировки сна не дают полностью отключить экран: он продолжает работать с тем или иным уровне яркости.

    При написании кода блокировок сна нужно прежде всего запросить разрешение на их использование в манифесте AndroidManifest.xml:

    После этого можно создать объект WakeLock, содержащий функции acquire() и release() для управления блокировкой сна. Хороший пример находится в файле WakeLockActivity.java:

    Public void onCreate(Bundle savedInstanceState) { ... mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); ... mWakeLock = mPowerManager.newWakeLock(mWakeLockState, "UMSE PowerTest"); if (mWakeLock != null) { mWakeLock.acquire(); ... } } protected void onDestroy() { if (mWakeLock != null) { mWakeLock.release(); mWakeLock = null; } ... }

    Заключение

    Блокировка сна - это возможность системы Android, позволяющая разработчикам изменять состояние электропитания устройства по умолчанию. Опасность использования блокировок сна в приложениях заключается в преждевременном израсходовании заряда аккумуляторов. Некоторые явные преимущества блокировок сна очевидны в ряде стандартных приложений Google, например, для навигации или для воспроизведения музыки и видео. Каждый разработчик приложений должен самостоятельно принимать решение о том, будет ли применение блокировок сна целесообразным.

    Об авторе

    Кристофер Берд (Christopher Bird) начал свою карьеру в подразделении Intel SSG в 2007 году и участвует в построении экосистемы устройств с процессорами Atom (телефонов и планшетов)

    Справочные материалы

    2 LWN – “Wakelocks and the embedded problem”: http://lwn.net/Articles/318611/

    Примечания

    ИНФОРМАЦИЯ В ДАННОМ ДОКУМЕНТЕ ПРИВЕДЕНА ТОЛЬКО В ОТНОШЕНИИ ПРОДУКТОВ INTEL. ДАННЫЙ ДОКУМЕНТ НЕ ПРЕДОСТАВЛЯЕТ ЯВНОЙ ИЛИ ПОДРАЗУМЕВАЕМОЙ ЛИЦЕНЗИИ, ЛИШЕНИЯ ПРАВА ВОЗРАЖЕНИЯ ИЛИ ИНЫХ ПРАВ НА ИНТЕЛЛЕКТУАЛЬНУЮ СОБСТВЕННОСТЬ. КРОМЕ СЛУЧАЕВ, УКАЗАННЫХ В УСЛОВИЯХ И ПРАВИЛАХ ПРОДАЖИ ТАКИХ ПРОДУКТОВ, INTEL НЕ НЕСЕТ НИКАКОЙ ОТВЕТСТВЕННОСТИ И ОТКАЗЫВАЕТСЯ ОТ ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ ГАРАНТИЙ В ОТНОШЕНИИ ПРОДАЖИ И/ИЛИ ИСПОЛЬЗОВАНИЯ СВОИХ ПРОДУКТОВ, ВКЛЮЧАЯ ОТВЕТСТВЕННОСТЬ ИЛИ ГАРАНТИИ ОТНОСИТЕЛЬНО ИХ ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ, ОБЕСПЕЧЕНИЯ ПРИБЫЛИ ИЛИ НАРУШЕНИЯ КАКИХ-ЛИБО ПАТЕНТОВ, АВТОРСКИХ ПРАВ ИЛИ ИНЫХ ПРАВ НА ИНТЕЛЛЕКТУАЛЬНУЮ СОБСТВЕННОСТЬ.

    КРОМЕ СЛУЧАЕВ, СОГЛАСОВАННЫХ INTEL В ПИСЬМЕННОЙ ФОРМЕ, ПРОДУКТЫ INTEL НЕ ПРЕДНАЗНАЧЕНЫ ДЛЯ ИСПОЛЬЗОВАНИЯ В СИТУАЦИЯХ, КОГДА ИХ НЕИСПРАВНОСТЬ МОЖЕТ ПРИВЕСТИ К ТРАВМАМ ИЛИ ЛЕТАЛЬНОМУ ИСХОДУ.

    Корпорация Intel оставляет за собой право вносить изменения в технические характеристики и описания своих продуктов без предварительного уведомления. Проектировщики не должны полагаться на отсутствующие характеристики, а также характеристики с пометками «зарезервировано» или «не определено». Эти характеристики резервируются Intel для будущего использования, поэтому отсутствие конфликтов совместимости для них не гарантируется. Информация в данном документе может быть изменена без предварительного уведомления. Не используйте эту информацию в окончательном варианте дизайна.

    Продукты, описанные в данном документе, могут содержать ошибки и неточности, из-за чего реальные характеристики продуктов могут отличаться от приведенных здесь. Уже выявленные ошибки могут быть предоставлены по запросу. Перед размещением заказа получите последние версии спецификаций в региональном офисе продаж Intel или у местного дистрибьютора.

    Номерные копии документов, на которые имеются ссылки в данном документе, а также другие материалы Intel можно заказать по телефону 1-800-548-4725 или загрузить по адресу http://www.intel.com/design/literature.htm

    Программное обеспечение и нагрузки, использованные в тестах производительности, могли быть оптимизированы для достижения высокой производительности на микропроцессорах Intel. Тесты производительности, такие как SYSmark и MobileMark, проводятся на определенных компьютерных системах, компонентах, программах, операциях и функциях. Любые изменения любого из этих элементов может привести к изменению результатов. При выборе приобретаемых продуктов следует обращаться к другой информации и тестам производительности, в том числе к тестам производительности определенного продукта в сочетании с другими продуктами.

    Данный документ и описываемое в нем программное обеспечение предоставляются по лицензии и могут использоваться и распространяться только согласно условиям лицензии.

    Intel® и эмблема Intel являются товарными знаками корпорации Intel в США и в других странах.

    © Intel Corporation, 2012. Все права защищены.

    *Другие наименования и торговые марки могут быть собственностью третьих лиц.

    В Android по умолчанию установлено минимальное значение бездействия, после которого ваше устройство переходит в спящий режим. Стандартный таймер – 2 минут. Этого мало, так как вы можете отвлечься ненадолго от работы.


    В этом материале мы разберем два основных вопроса:

    1. Как полностью отключить спящий режим.
    2. Как увеличить время ожидания.

    Полное отключение спящего режима

    Стандартные инструменты Android не позволяют полностью отключить спящий режим, поэтому воспользуемся для этого сторонними приложениями. Зайдите в Google Play, в поисковой строке вбейте «Stay Alive! Keep screen awake». Не рекомендуется скачивать подобные программы из других источников. Приложение бесплатное и простое, поэтому мы и выбрали его среди более функциональных платных аналогов.

    К сожалению, русифицированной версии еще нет.

    Открыв приложение, вы увидите, что напротив надписи «Always keep screen Alive » уже стоит отметка. Перевод здесь простой: устройство всегда остается активно. Если вам нужно сохранять активность только при работе с определенными программами, то выберите их в списке.

    Нажимаем на раздел «Keep screen Alive! for selected apps ». Ниже будет кнопка «Select apps that… ». Здесь отобразятся все приложения, установленные на вашем планшете. Отмечаем галочкой нужные программы.

    Готово, теперь спящий режим не будет мешать вашей работе. Отключить режим перманентно активного устройства вы сможете по такой же схеме – просто снимите галочку с параметра «Always keep screen Alive ».

    Увеличение времени пребывания устройства в активном режиме

    Это действие можно выполнить при помощи стандартных служб Android:

    1. Открываем основные настройки планшета и переходим в раздел Экран .
    2. В списке настроек вы найдете раздел Спящий режим .
    3. Здесь можно изменить только время, хотя существуют исключения: на некоторых версиях Android в этом меню можно отключить тайм-аут. У вас, скорее всего, этот пункт не будет активным.
    4. При необходимости можно поставить и полчаса.

    Что касается планшетов Apple, то здесь можно уменьшить задержку или полностью отключить ее. Для этого нужно зайти параметры на рабочем столе. Переходим в раздел Основные .

    Здесь следует выбрать Автоблокировку , которая отвечает за работу спящего режима. Вы можете указать интервал из списка или просто нажать Никогда , тогда гаджет вообще не будет переходить в спящий режим..

    Современные смартфоны и планшеты гораздо больше напоминают полноценный ПК, чем простое устройство для общения и получения информации. Теперь их оснащают четырехъядерными процессорами с частотой в 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.

    Главная «проблема» не только 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 для удержания процессора в режиме бодрствования.

    Злоупотребление этими механизмами может привести к избыточному расходу энергии независимо от того, в каком режиме работы находится гаджет. К счастью, имея 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/[email protected]. Очевидно, что он устанавливается на время автоматической синхронизации почты, поэтому понизить энергозатраты можно, просто отключив синхронизацию Gmail в «Настройки -> Аккаунты -> Google -> [email protected]». С другой стороны, делать этого я не хочу и лучше потерплю три минуты бодрствования за полтора дня.


    Пройдя по списку самых энергозатратных приложений с помощью Wakelock Detector, легко понять, что основные причины пробуждения устройства - это разные виды синхронизации и регулярное обновление информации о местоположении. Это значит, что, отключив эти функции полностью, можно избавиться от большинства случаев пробуждения и серьезно сэкономить батарею.

    Я бы рекомендовал сперва зайти в настройки Google-аккаунта («Настройки -> Аккаунты -> Google -> [email protected]») и аккаунтов других приложений и отключить все ненужные виды синхронизации. Мне, например, не нужны синхронизация календаря, стандартного браузера, контактов Google+ и «данных приложений», так что я могу спокойно избавиться от них. Так же следует поступить и со всеми остальными зарегистрированными на смартфоне аккаунтами, а в настройках сторонних приложений отключить автоматическую синхронизацию (тебе действительно нужна автосинхронизация Twitter и RSS?). Редко используемые приложения лучше удалить вовсе.

    Последние версии Android не позволяют отключить определение местоположения полностью, но зато могут использовать очень консервативный и почти не влияющий на жизнь смартфона режим под названием (сюрприз!) «Экономия заряда батареи», который обновляет информацию только тогда, когда происходит подключение к Wi-Fi-сети или переход на другую сотовую вышку.

    Если приложение садит аккумулятор, а удалять его нельзя и в настройках нет опций синхронизации или автообновления, то его можно просто заморозить. Делается это с помощью великолепного приложения под названием Greenify. Оно подавляет возможность приложения просыпаться самостоятельно и заставляет его работать только тогда, когда ты сам этого захочешь. Пользоваться очень просто. Запускаем Greenify, нажимаем на кнопку + в левом нижнем углу и видим, какие приложения дольше всего работают в фоне. На скриншоте видно, что наиболее прожорливые - это OTransfer Target, используемый для удаленного включения переадресации (оно вообще постоянно бодрствует), а также Beautiful Widgets и Carbon, которые периодически просыпаются для разного рода синхронизаций. OTransfer Target я ставил для теста, так что могу спокойно его удалить (оно, кстати, также есть в числе «лидеров» в Wakelock Detector). Beautiful Widgets просыпается для обновления виджета на рабочем столе, поэтому его я оставлю в покое. А вот Carbon, занявший пятое место по версии Wakelock Detector, можно заморозить. Для этого достаточно просто тапнуть по имени и нажать галочку в правом верхнем углу.

    1. Убийство фоновых процессов с помощью таск-киллера. Одна из самых глупых идей из всех, что только могут прийти в голову. Следует просто запомнить: фоновые процессы не потребляют энергию, обычно ее потребляют запущенные ими сервисные службы, которые либо вообще не убиваются таск-киллерами, либо имеют способность к самовоскрешению. А вот убийство самих фоновых приложений приводит к необходимости их повторного запуска, на что энергия таки тратится.
    2. Отключение Wi-Fi дома. В энергосберегающем режиме (когда смартфон спит) модуль Wi-Fi потребляет очень мало энергии, настолько мало, что на включение и выключение модуля зачастую расходуется гораздо больше. Имеет смысл разве что на планшете, который берешь в руки два-три раза в день, чтобы почитать новости или книгу.
    3. Автоматическое переключение между 2G и 3G. Аналогичная история. При скачках между типами сетей происходит повторный поиск вышек и повторное же соединение, а в это время радиомодуль работает на полную мощность. Приложения, автоматически включающие 2G во время сна, почти всегда приводят к еще большему расходу энергии.
    4. Приложения с названиями вроде Ultimate Battery Saver. В 99% (если не в ста) случаев это либо плацебо, либо все тот же таск-киллер, снабженный механизмом, который отключает разные компоненты смартфона при достижении определенного уровня заряда. Сначала происходит перевод на 2G и отключение GPS, затем отключается интернет, а под самый конец телефон переводится в режим полета. Проблема здесь в том, что описанный механизм работы скорее мешает и все это удобнее сделать самому в нужное время.
    5. Калибровка батареи с помощью рекавери. С давних пор существует миф о том, что удаление файла /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 это кнопка «Профиль» сразу над значениями).

    INFO

    Смартфон с AMOLED-экраном будет работать дольше, если использовать приложения с черным фоном. Чтобы сделать системные приложения темными, можно использовать прошивку AOKP или один из модулей Xposed.

    Зачастую механизм автоматической регулировки яркости экрана выставляет слишком высокие значения. Если управлять яркостью вручную, можно продлить жизнь смартфона еще на пару часов.

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

    Вместо выводов

    В целом описанные в статье методы могут продлить жизнь от батареи как минимум на полдня (при средней интенсивности использования), а при тотальном отключении всех видов синхронизации и удалении ненужных приложений - еще больше. Выполнить рекомендации не трудно, а эффект значительный.

    В отличие от iOS и Windows Phone, на Android в фоновом режиме может работать множество приложений и сервисов. Все они создают дополнительную нагрузку на оперативную память и процессор, а значит, расходуют драгоценную энергию. Причем, они работают даже тогда, когда не нужно — например, ночью, в то время как вы спите.

    Решить проблему чрезмерного потребления Android-приложениями ресурсов устройства можно несколькими способами: запретить приложениям, которыми вы пользуетесь редко, запускаться вместе с загрузкой системы или более радикально - отключать Wi-Fi, мобильный интернет и большинство фоновых процессов.

    1. Установите его из Google Play, запустите.

    2. Зайдите в раздел Phone Boost, нажмите кнопку «Autostart Manager», там показаны все приложения, которые запускаются при включении устройства.

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


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


    Более серьезной экономии ресурсов можно добиться с помощью приложений, которые при выключении экрана уводят устройство в глубокий сон. Одно из таких приложений - . Оно позволяет отключить модуль 3G, интернет, Bluetooth, синхронизацию данных и сильно ограничить работу фоновых процессов.

    Как работать с Deep Sleep Battery Saver:

    1. Установите его из Google Play, запустите и предоставьте ему root-права.

    2. При желании смените язык интерфейса на русский.


    3. Зайдите во вкладку «Профиль» и выберите, что будет происходить, когда экран вашего устройства выключен. Чем более строгая экономия, тем меньше ресурсов устройства будет расходоваться.