Программа doze для андроид
Приложение Doze – энергосбережение для android представляет из себя очень полезный инструмент, способный продлить работу вашего устройства в режиме автономного режима.
Наверняка всем известно, что именно передача данных является одним из основных фактов на быстрое разряжение аккумулятора вашего устройства, что соответственно приводит к потере энергии и быстрому выходу ее из строя. Разработчики программы Doze – энергосбережение на android за основу взяли режим энергосбережения используемый в операционной системе Android 5.0 Lollipop, но переделали его и сделали более эффективным. Проще говоря данный режим позволяет отключить активную передачу данных и автоматические обновление приложений в фоне, что позволяет сохранить энергию и одновременно снизить функционал вашего смартфона/планшета.
Данная программа работает немного на ином алгоритме, связанный с виртуальными частными сетями, которые не ограничивают использование мобильного интернета и передачу данных на устройстве. При этом активация режима происходит только в момент блокировки дисплея устройства и добавлении тех или иных программ в список исключения.
Активация программы происходит простым нажатием на одну кнопку, после чего вы увидите, как она заработает, а если вам будет нужно включить приложения список исключения, то просто нажмите на иконку, расположенную в левом верхнем углу, после чего нажмите на знак плюсика рядом с теми программами и играми, которые вам необходимы. Интерфейс приложения выполнено в простом, но достаточно стильном оформлении, все очень красиво и не вызывает вопросов, к тому же программа полностью на русском языке.
Разработчик: YirgaLab
Платформа: Android 4.0 и выше
Язык интерфейса: Русский (RUS)
Состояние: Free (Бесплатно)
Root: Не нужен
Приложение Doze – энергосбережение для android представляет из себя очень полезный инструмент, способный продлить работу вашего устройства в режиме автономного режима.
Наверняка всем известно, что именно передача данных является одним из основных фактов на быстрое разряжение аккумулятора вашего устройства, что соответственно приводит к потере энергии и быстрому выходу ее из строя. Разработчики программы Doze – энергосбережение на android за основу взяли режим энергосбережения используемый в операционной системе Android 5.0 Lollipop, но переделали его и сделали более эффективным. Проще говоря данный режим позволяет отключить активную передачу данных и автоматические обновление приложений в фоне, что позволяет сохранить энергию и одновременно снизить функционал вашего смартфона/планшета.
Данная программа работает немного на ином алгоритме, связанный с виртуальными частными сетями, которые не ограничивают использование мобильного интернета и передачу данных на устройстве. При этом активация режима происходит только в момент блокировки дисплея устройства и добавлении тех или иных программ в список исключения.
Активация программы происходит простым нажатием на одну кнопку, после чего вы увидите, как она заработает, а если вам будет нужно включить приложения список исключения, то просто нажмите на иконку, расположенную в левом верхнем углу, после чего нажмите на знак плюсика рядом с теми программами и играми, которые вам необходимы. Интерфейс приложения выполнено в простом, но достаточно стильном оформлении, все очень красиво и не вызывает вопросов, к тому же программа полностью на русском языке.
Разработчик: YirgaLab
Платформа: Android 4.0 и выше
Язык интерфейса: Русский (RUS)
Состояние: Free (Бесплатно)
Root: Не нужен
Режим энергосбережения Doze — одно из ключевых новшеств Android 6.0. Это не просто очередная оптимизация, это кардинальное решение, позволяющее, по словам Google, существенно продлить жизнь устройства от батареи. Но так ли эффективен этот механизм на самом деле? Попробуем выяснить, а заодно разберемся, как он работает и можно ли его настроить под себя и активировать на старых версиях Android.
В чем проблема?
Когда Google заявляет, что после обновления до Android 6.0 жизнь Nexus 7 продлевается на пять часов, верится с трудом. Уж слишком фантастическая цифра. Однако если разобраться в том, как работает Doze, то все встанет на свои места. Дело в том, что Doze — это не какая-то навороченная технология, а довольно простой механизм, который всего лишь ликвидирует одну из проблем Android, заложенную еще на этапе проектирования операционной системы.
В отличие от со всех сторон обрезанной iOS, Android всегда был операционкой, гораздо более близкой по духу к настольным операционным системам, и одной из его особенностей всегда была полноценная многозадачность. Другими словами, приложения никогда не ограничивались в том, что они делают, пока находятся, так сказать, в свернутом состоянии. Ты мог спокойно запустить обновление списка писем в почтовом приложении, свернуть его и продолжать читать твиттер. Почтовый клиент благополучно загрузит цепочки писем в фоновом режиме и выведет в статусную строку уведомление. Более того, можно не просто свернуть приложение, а вообще выключить экран, и оно все равно сделает свою работу.
С одной стороны, это полезная особенность Android, которая позволяет работать со смартфоном гораздо более эффективно (и это, кстати, очень заметно при переходе с Android на iOS). С другой стороны, очень скоро после появления Android стали заметны серьезные проблемы такого подхода. Многие приложения им просто злоупотребляли, причем вовсе не из-за злого умысла разработчика, а по причине дилетантизма и неумения грамотно писать код. В результате заряд батареи расходовался чересчур быстро.
Долгое время проблему пыталась побороть как сама Google, так и независимые разработчики. В первом случае результатом работы стали разные ухищрения, такие, например, как автоматическое отслеживание работы фоновых сервисов приложений и их убийство при слишком долгой активной работе или слишком высокой нагрузке на процессор (Android 4.4). Во втором случае появились приложения Wakelock Detector и Greenify. Одно показывало, какие приложения не дают процессору уснуть, другое позволяло «заморозить» эти приложения, чтобы они вообще не могли работать в фоне. Для многих любителей ставить на смартфоны сотни приложений эти два инструмента стали спасением.
Wakelock Detector: список жадных до процессора приложений
Однако, кроме root на смартфоне, Wakelock Detector и Greenify требовали также понимать, что ты делаешь, тратить время на поиск жадных до процессора приложений, да и вообще все это грязные хаки. С помощью Doze Google как раз и попыталась избавиться от этих проблем, реализовав полностью автоматический механизм заморозки приложений.
Greenify: выбираем приложения для заморозки
Как это работает?
Doze — это системный сервис, который активируется после отключения экрана и следит за тем, не взял ли ты смартфон в руки (с помощью датчиков положения) или не подключил ли к зарядке. Тогда же начинается отсчет времени; если по окончании этого периода указанных действий со смартфоном не происходит, Doze переводит его в режим агрессивного энергосбережения (на самом деле все сложнее, но об этом позже), который предполагает:
- запрет любых сетевых операций;
- полное игнорирование вейклоков (wake locks), того самого механизма, который позволяет приложениям безнаказанно работать, даже если экран выключен;
- отложенное выполнение алармов (alarms), которые позволяют приложениям получать управление в указанное время;
- отключение сканирования Wi-Fi;
- отключение синхронизаций, как с Google, так и с другими облачными сервисами, добавленными в раздел «Аккаунты» в настройках;
- отключение JobScheduler, подсистемы, позволяющей приложениям получать управление при определенных условиях (при подключении к Wi-Fi, например).
Говоря простыми словами, Doze запрещает приложениям делать что-либо, если смартфон долгое время не используется. Но есть несколько исключений. Первое: через определенные периоды система на короткое время выходит из режима Doze, позволяя приложениям выполнить отложенные действия (те же алармы). Причем чем дольше смартфон остается нетронутым, тем реже будет происходить выход из Doze. Второе: система учитывает потребности таких приложений, как будильники, и выходит из режима Doze незадолго до того, как они должны сработать (такие приложения должны использовать метод setAalarmClock() класса AlarmManager). Третье: приложения, получающие push-уведомления с помощью Google Cloud Messaging (GCM), смогут выводить смартфон из режима Doze, но только в том случае, если это высокоприоритетное уведомление. Четвертое: звонки и СМС сразу выводят смартфон из режима Doze.
Временная шкала работы Doze
Вместе с Doze в Android 6.0 также появилась родственная ему функция App Standby. По сути, это все тот же механизм, но работающий в отношении отдельно взятых приложений, а не всей системы в целом и не зависящий от того, выключен экран или нет. Работает он так: система непрерывно следит за тем, какие ранее запущенные приложения ты используешь, и, если ты долго не возвращался к какому-то из них, переводит его в режим Standby. В таком режиме приложение имеет все те же ограничения, что и в режиме Doze, и точно так же время от времени получает управление на короткие периоды.
Можно ли отключить Doze?
Doze — это, безусловно, большой шаг вперед в энергосбережении. Однако далеко не каждый пользователь будет рад тому, что все его приложения будут так или иначе заморожены. Есть целый класс программ, которые должны работать в фоне и постоянно выполнять какие-то действия: скрытые GPS-трекеры, приложения для удаленного управления, разного рода серверы (SSH, SMB). Поэтому в Android есть встроенный интерфейс для отключения Doze для отдельно взятых приложений (белый список).
Находится он здесь: «Настройки -> Батарея -> меню -> Экономия заряда батареи -> Все приложения». Достаточно тапнуть по нужному приложению и выбрать пункт «Не экономить». После этого приложение сможет использовать интернет и занимать процессор (с помощью тех самых вейклоков) когда ему заблагорассудится, однако все остальные ограничения Doze и App Standby будут продолжать действовать.
Отключаем Doze для приложения
Запрос на добавление в белый список может инициировать и само приложение. В Play Маркете такое приложение будет подвергнуто дополнительной модерации и будет допущено к публикации в магазине только при соблюдении определенных условий. В частности, Doze разрешается обходить только приложениям, которые технически с ним несовместимы или по каким-либо причинам не могут использовать GCM.
Чтобы отключить Doze полностью, нужно либо подключить смартфон по ADB к компу, либо иметь root. Во втором случае отключение Doze выполняется с помощью любого доступного в маркете эмулятора терминала:
Более широкие настройки?
Имея root, Doze можно затюнинговать под себя. Для этого есть несколько приложений, но мы остановимся на Naptime от небезызвестного Франциско Франко (в журнале было интервью с ним). Naptime позволяет изменить почти любые настройки Doze, в том числе время его включения, разрыв между интервалами выхода из Doze, частоту опроса сенсоров положения и многое другое.
Приложение имеет множество настроек, разделенных на три секции: Sensors, Idle и Apps, плюс в самом верху переключатель для ленивых Agressive Doze. Последний, как и гласит название, запускает агрессивный режим работы Doze, который предполагает, что Doze будет активирован сразу после отключения экрана. Использовать его я рекомендую только в крайних случаях, например во время долгих поездок без доступа к заряднику.
У каждой настройки есть описание (на английском), однако понять его смысл, не зная, через какие стадии проходит смартфон перед переходом в режим Doze, практически невозможно. Поэтому нам придется углубиться в детали. Если не брать в расчет некоторые этапы вроде заблаговременного определения местоположения, которое может понадобиться находящимся в Doze приложениям, то цикл работы Doze выглядит так:
- Экран смартфона выключается.
- Запускается Inactive timeout (по умолчанию тридцать минут), во время которого смартфон просто следит за тем, не включится ли экран снова.
- По истечении тайм-аута запускается Sensing timeout (четыре минуты), во время которого смартфон ждет любые движения смартфона — если они есть, запускается Motion inactive timeout (десять минут), по окончании которого вновь запускается Sensing timeout.
- Если движений нет, запускается Idle after inactive timeout (тридцать минут), смартфон ждет резких движений и перемещений смартфона (Significant motion), если они происходят, запускается Motion inactive timeout, а далее все сначала с третьего пункта.
- Если и резких движений нет, смартфон переходит в режим Doze и запускается Idle timeout (один час), смартфон продолжает следить за движениями.
- По истечении Idle timeout смартфон на короткое время выходит из режима Doze, запуская Idle pending timeout (пять минут).
- Если движений не происходит, смартфон вновь возвращается в режим Doze, но в этот раз на время, равное Idle timeout * Idle factor (2.0), то есть на два часа.
- Шаги 6 и 7 повторяются.
Во время всех шагов этого цикла, начиная с третьего, смартфон следит за движениями смартфона и, если они есть, запускает Motion inactive timeout, после которого возвращается к третьему шагу. Другими словами, смартфон, который постоянно перемещается в пространстве (например, при ходьбе), будет всегда находиться в режиме либо Sensing, либо Motion inactive и никогда не перейдет в режим Doze. Если же смартфон находится в покое, переход в режим Doze случится не раньше, чем через час (Inactive timeout + Idle after inactive timeout).
Стандартные настройки близки к оптимальным для большинства людей. В течение дня, когда ты берешь смартфон в руки как минимум раз в час, он будет работать в обычном режиме, а по ночам благополучно переходить в режим Doze. Это абсолютно логичная и правильная схема работы. Любителям экспериментов я бы предложил обратить внимание на Inactive timeout, Motion inactive timeout и Idle pending timeout. Первые два можно уменьшить, например, в два раза, тогда находящийся в покое смартфон будет переходить в режим Doze уже через тридцать минут. Idle pending timeout определяет период, в который смартфон будет бодрствовать, временно выходя из Doze. Пять минут может быть слишком много для того, чтобы приложения всего лишь успели забрать почту и обновить виджет погоды, так что этот параметр можно снизить до одной-двух минут. Остальные настройки я бы не трогал.
Кстати, смартфон можно в любой момент принудительно перевести в режим Doze с помощью все той же команды dumpsys (правда, делать это следует при выключенном экране, например с помощью ADB):
Также можно перевести в режим App Standby отдельно взятое приложение:
С помощью команды dumpsys deviceidle можно узнать текущие настройки Doze
Doze для более старых версий Android?
Doze встроен в операционную систему и затрагивает многие ее компоненты, поэтому перенести его в более старую версию ОС, не подвергая ее серьезным изменениям, невозможно. Однако уже появились люди, играющие на желании пользователей получить Doze, не устанавливая Android 6.0. Приложение Doze уже успело засветиться на многих зарубежных и отечественных сайтах как сторонняя реализация оригинальной функции от Google, совместимая аж с Android 4.1.
На самом же деле приложение не имеет ничего общего с функцией Doze из Android 6.0. Все, что оно делает, — просто запрещает приложениям использовать интернет, когда экран выключен. Другими словами, как и раньше, приложения будут продолжать просыпаться и занимать процессор, но не получат доступ к сети. Какая-то экономия батареи от этого, конечно, будет, но это жуткий костыль, который сломает нормальное функционирование многих приложений (само собой, функции временного отключения режима энергосбережения тут нет).
Запомни эту сову — она не та, за кого себя выдает
Выводы
Doze — отличная технология, но это вовсе не волшебная пилюля, которая решит все твои проблемы с расходом батареи разом. Ее эффективность сильно зависит от того, как ты используешь устройство. На смартфоне разница в расходе батареи после перехода на Android 6.0, скорее всего, будет практически незаметна, Doze проявит себя только ночью, когда смартфон находится в покое.
Однако для планшета все может быть совсем иначе. Если ты используешь его нечасто, например только для чтения книг и иногда игр, Doze сможет проявить себя во всей красе. Большую часть времени планшет будет находиться в режиме энергосбережения, так что расход окажется минимальным (в идеале нулевым).
Евгений Зобнин
Редактор рубрики X-Mobile. По совместительству сисадмин. Большой фанат Linux, Plan 9, гаджетов и древних видеоигр.
В этой статье мы рассмотрим три самых важных изменения в новом Android, которые не могут быть проигнорированы ни одним разработчиком, который поставил у себя в проекте targetSdk = 23 и выше.
Doze Mode — режим «отключки», в который переходят все устройства на Marshmallow после некоторого времени обездвижения без зарядки.
App Standby — автоматическое лишение приложений доступа к ресурсам устройства, всех которые давно не открывал пользователь.
Runtime Permissions — новая модель запроса разрешений. Теперь мы, как разработчики, каждый раз обращаясь, например, к микрофону устройства, должны проверять, есть ли у нашего приложения разрешение на доступ к нему.
В Google в новом релизе Android сделали очень важный шаг в сторону оптимизации работы батареи. Все мы знаем, как пользователи любят повонять в комментариях высказываниями: «Дурацкие Google Play Services» жрут 25% батареи моего ******* S III, гопники, верните мне мой драгоценный айфон, нет сил, терпеть издевательства от Гугл". Только вот эти пользователи не ставили себе никогда Battery Historian и не в курсе, что жрут батарею бесплатные игры от сомнительных авторов и такие же сделанные на коленке живые обои, например. Но пользователь этого не знает, и как бороться с кучей левых приложений, беспощадно съедающих батарею, он не в курсе.
Ну теперь пользователям об этом заботиться и не придется. С приходом двух новых режимов Doze Mode и App Standby операционная система перекрывает кислород всем чрезмерно жрущим заряд приложениям. Как? Читаем далее:
Когда устройство на Android Marshmallow лежит без движения и без зарядки, спустя час оно переходит в Doze Mode. Режим отключки, когда почти все приложения перестают жрать батарею.
Это происходит не сразу, а по шагам:
ACTIVE — Устройство используется или на зарядке
INACTIVE — Устройство недавно вышло из активного режима (пользователь выключил экран, выдернул зарядку и т.п.)
. 30 минут
IDLE_PENDING — Устройство готовится перейти в режим ожидания
. 30 минут
IDLE — Устройство в режиме бездействия
IDLE_MAINTENANCE — Открыто короткое окно, чтобы приложения выполнили свою работу
Мы можем продебажить наши приложения, переключаясь последовательно между этими шагами с помощью:
В момент, когда устройство переходит в состояние IDLE:
- Доступ приложению к сети отключен, пока приложение не получит high-priority GCM-push.
- Система игнорирует Wake lock’и. Приложения могут сколько угодно пытаться запросить пробуждение процессора — они их не получат.
- Alarm’ы запланированные в AlarmManager не будут вызываться, кроме тех, которые будут обновлены с помощью setAndAllowWhileIdle().
- Система не производит поиска сетей Wi-Fi.
- NetworkPolicyManagerService: пропускает только приложения из белого списка.
- JobSchedulerService: все текущие задачи отменяются. Новые откладываются до пробуждения.
- SyncManager: все текущие отменяются, новые откладываются до пробуждения.
- PowerManagerService: только задачи приложений из белого списка вызовутся.
Во многих других случаях мы вообще не должны об этом переживать, после того, как пользователь возьмет устройство в руки, все заснувшие alarm'ы и SyncAdapter'ы проснутся и сделают свою работу. (Да-да я знаю, что после выхода из doze mode все начинает синкаться и даже Nexus 9 минуты две тормозит)
- Пользователь явно запустил приложение.
- Приложение имеет процесс, работающий в данный момент на переднем плане (Activity или foreground service, или используется другой activity или foreground service’ом).
- Приложение создало уведомление, которое висит в списке уведомлений.
- Пользователь принудительно добавил приложение в список исключений оптимизации в настройках системы
Возможно сейчас разработчики коммерческих voip нервно начали продумывать, как запретить обновляться своим пользователям на пугающий своей жесткостью Android Marshmallow. Но не волнуйтесь, есть специальный Whitelist, в который пользователь руками может добавить исключения. Приложениям из Whitelist не страшны ни Doze Mode ни App Standby.
Чтобы проверить, попало ли наше приложение в Whitelist вызываем метод isIgnoringBatteryOptimizations().
Пользователь может сам руками добавить/удалить из списка в настройках Settings > Battery > Battery Optimization
Но мы можем его сами попросить с помощью интента ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS или запросив пермишен REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, который покажет диалог на автоматическое добавление в вайтлист с разрешения пользователя.
Мы подобрались к самому известному изменению в Android Marshmallow. Более того это изменение требует от нас наибольшего вовлечения в перелопачивание кода приложения. Кратко говоря: халява кончилась.
-
, вроде доступа к сети и bluetooth. . В этот список входят разрешения на: календарь, камеру, контакты, местоположение, микрофон, телефон, сенсоры, смс и внешнее хранилище
Вот как раз все опасные разрешения мы и должны постоянно проверять, ибо пользователь может в любой момент их запретить. Да и при первом старте доступа у приложения к ним нет.
- Описать только PROTECTION_NORMAL запросы в manifest
- Пользователь их все подтвердит при установке
- Когда приложению нужен доступ к одному или нескольким разрешениям из группы опасных, проверить, нет ли разрешения
- Если разрешения нет — запросить
- Если разрешения не будет — объяснить, на что это повлияет
- Если разрешение получено — продолжить работу
Запрашивать лишь те разрешения, которые действительно нужны. До сих пор в Google Play находятся разработчики, которые запрашивают все подряд
Если есть возможность, вместо запроса воспользоваться внешним Intent. Например, для фото или видео часто нет смысла встраивать камеру в приложение, гораздо проще воспользоваться внешним приложением
Запрашивать разрешение, только перед тем, когда оно понадобится. Запрашивать при старте приложения все разрешения нелогично (из тех, которые нам нужны), их смысл как раз в том, что мы запрашиваем их в контексте их использования.Например, пользователю становится понятно зачем его банковскому клиенту доступ к контактам — чтобы выбрать одного при шаринге по ФИО
Пояснять пользователю, для чего запрашивается разрешение. Если пользователь все же запретил приложению доступ, а без него оно не может, оно должно максимально понятно объяснить, что без этого разрешения оно работать дальше не будет
Сегодня мы поговорили о самых заметных изменениях в Android Marshmallow. Так же обязательно прочтите полностью вторую статью про остальные изменения и нововведения в Marshmallow. Спасибо за внимание и скорейшую оптимизацию ваших приложений под новый Android!
Читайте также: