Doze режим: что это, и как оно работает?

что это, и как оно работает?

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

Собственно, ничего сенсационного в этом нет, так как об оптимизации энергозатрат так или иначе упоминается в описании каждой новой мобильной ОС, а не только Android.

Но в этот раз в Google, очевидно, решили предложить пользователям нечто более заметное, чем просто маркетинг.

И предложили Doze.

С английско-американского это слово можно перевести как «сон». Фактически doze mode — это и есть «спящий режим». Но в Android 6.0 Marshmallow термином doze обозначается целый набор изменений и правил, с которыми бездействующий смартфон или планшет практически вообще не потребляет заряд батареи. Опять же, ничего нового, казалось бы. Но, как говорится, есть довольно интересные нюансы, о которых не мешает узнать подробнее.

Прежде всего отметим, что режим doze в Android включать не нужно. Для него вы не найдете никаких выключателей и/или отдельных настроек, которые можно менять или переключать. Doze в Android просто есть, и активируется эта функция автоматически и в нужный момент. Сама, т.е. без участия или согласия/несогласия юзера. Более того, работу doze вы тоже не заметите.

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

И вот когда вы оставите ваш смартфон в полном покое, включается «режим» Doze, и аппарат в буквальном смысле засыпает. Ну, почти. Он по-прежнему будет выдавать уведомления, если какое-нибудь из важных приложений вдруг решит обратить на себя ваше внимание, звонки и СМС тоже будут проходить и смартфон, конечно, проснется, но вот, скажем, на уведомления об email-сообщениях, разных событиях в онлайн-игрушках и прочие менее значительные данные он отзываться уже не будет.

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

Потому в режиме Doze все даже самые высокоприоритетные уведомления приложений, которые не проходят через сеть мобильного оператора (а это звонки и текстовые сообщения), сначала направляются на сервер Google Cloud Messaging. И если там обнаруживается, что чей-то программный продукт ведет себя слишком беспокойно, то к нему будут приняты меры воспитательного характера. Есть мнение, что такие приложения больше не смогут получать статус высокоприоритетных.

Впрочем, это не означает, что Google вообще не будет пропускать на ваш смартфон важные уведомления в режиме Doze. Просто пока смартфон спит, сервер Google все низкоприоритетные уведомления сервер Google будет автоматически собирать в один большой пакет, и со всей пропущенной информацией от неприоритетных приложений вы сможете ознакомиться позже. Именно этим Doze и отличается от привычной всем функции «Не беспокоить» в Android. К слову, в компании такой сервис назвали «Idle maintenance window» (буквально «окно обслуживания в режиме простоя»).

В чем же реальна польза Doze?

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

Как пишут многие, за ночь их смартфоны расходуют вместо обычных 10-20% заряда примерно 2-5%. Плюс к этому, в частности многие владельцы Nexus отмечают, что общая автономность их аппаратов увеличилась с 16-20 часов до 24-30 часов, что, само собой, весьма существенно. Впрочем, имеет смысл дождаться настоящих тестов, чтобы составить более полное впечатление об эффективности Doze. На этом пока всё.

DOZE MODE и работа «маячка» в фоновом режиме телефона

В современных версиях операционной системы Android встроены средства экономии энергии аккумулятора телефона. Этого не было в более ранних релизах, скажем версия 4. 0 Андроида никак не мешает работе фоновых приложений. Более старшие реализации ПРИ ДЛИТЕЛЬНОМ НЕИСПОЛЬЗОВАНИИ ТЕЛЕФОНА начинают тормозить фоновые процессы и через некоторое время совсем их отключают. Это режим Doze Mode, то есть телефон впадает в глубокий сон.

Поэтому,  [на старших версиях Android] при долгом неиспользовании телефона, когда он, скажем лежит в кармане и владелец его не достает и ничего с ним не делает, работа нашего GPS-трекера («маяка») спустя приблизительно 1 час, притормаживается. Он перестает определять координаты и отправлять их на сервер.

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

И, опять таки, на младших версиях Android режима Doze Mode нет и там никаких манипуляций с телефоном не требуется.

Если Вы отслеживаете абонента и видите, что его маячок несколько десятков минут не подает сигналов — скорее всего владелец (если он, конечно, не выключил «маячок») телефона больше часа им не пользовался.  Отправьте ему СМС, напишите что-нибудь в WhatsAPP или Viber. позвоните ему наконец.

А как быть, если телефонный gps-маяк должен работать непрерывно, скажем, для отслеживания машин автопарка на линии в течение всего дня?

К счастью, это возможно и для этого достаточно подключить телефон к любому зарядному устройству: к прикуривателю автомобиля, к сетевому или мобильному зарядному устройству. При подключенной зарядке режим Doze Mode не включается и телефон не выключает фоновые приложения ни спустся час, ни даже через 12 часов неиспользования. И «маячок» будет работать все это время без перерывов.

PS: Не забудьте проверить настройки энергосбережения телефона. Разрешите передачу данных в фоновом режиме и выключите режим энергосбережения батареи для «Маячка». Эти настройки можно найти в меню настроек самого телефона, если он поддерживает энергосбережение.

Перейти на главную страницу КТО-ГДЕ.ИНФО >>>

Режим Wakelock и doze Oh! Android

Согласно документации Android Marshmallow, когда система находится в режиме доз, любой wakelock игнорируется. Однако мне непонятно, может ли wakelock предотвратить режим доз или нет.

Основываясь на некоторых тестах, используя Nexus 5 с окончательным (?) Предварительным просмотром Android 6.0, установленным:

  • Удерживать PARTIAL_WAKE_LOCK недостаточно для блокировки режима Doze – устройство все равно будет дремать, даже несмотря на то, что у вас есть WakeLock и вы пытаетесь выполнять обычную работу (например, setExactAndAllowWhileIdle() чтобы получать контроль каждую минуту)

  • Сохранение экрана при использовании android:keepScreenOn (или эквивалент Java) при android:keepScreenOn экране достаточно для блокировки режима Doze

  • Сохранение экрана при использовании android:keepScreenOn (или эквивалент Java), при выключенном экране (пользователь нажимает кнопку POWER) недостаточно для блокировки режима Doze

IOW, видеоплееры и т. П. Не должны подвергаться воздействию, пока пользователь просматривает видео, даже если игрок не может перемещаться или заряжаться. Однако, если пользователь нажимает кнопку «POWER», вы снова оказываете риск Doose.

Я не пробовал использовать FULL_WAKE_LOCK (я бы ожидал, что поведение идентично android:keepScreenOn , но я далек от определенного).

Интересно

Собственное приложение Google для часов в Android 6.0 способно полностью заблокировать режим Doze:

  1. В приложении часов установите будильник с временем <60 минут
  2. Выключить устройство
  3. В консоли установить $ adb shell dumpsys аккумулятор отключить
  4. В консоли установите $ adb shell dumpsys deviceidle step

Состояние остается следующим: «Stepped to: ACTIVE»

Если вы установите будильник с временем> 60 минут, он работает нормально (устройство может перейти в состояние ожидания). НО, как только сигнал тревоги находится на расстоянии 60 минут, кажется, что устройство тихо просыпается от Doze бездействия, так как состояние снова возвращает «ACTIVE» (вместо «IDLE_MAINTENANCE»).

Мне действительно интересно, как они это делают!

– РЕДАКТИРОВАТЬ –

Кажется, это setAlarmClock() который по умолчанию имеет такое поведение. Это может быть полезно для некоторых случаев использования.

В ответ на вышеупомянутое обсуждение комментариев это не ответ на вопрос. Он предназначен для уточнения поведения приложения в режиме «Доза» в целом. В моем тестовом приложении я пытался каждые два минуты получить GPS-позицию, уровень сигнала GPS был достаточным в любое время.

Условия тестирования:

  • Nexus 9, Android M Preview, Build MPA44I
  • «Игнорировать оптимизации» ВКЛ
  • SetExactAndAllowWhileIdle () с интервалом в 2 минуты
  • Каждая операция имеет 1-минутный тайм-аут для получения GPS-исправления и окружена частичным wakelock
  • Журналы были записаны в SQLiteOpenHelper.getWritableDatabase ()

Журнал испытаний GPS для режима «Дозировка»:

 1 2015-09-04 - 12:14 GPS ok (device left stationary unplugged) 2 2015-09-04 - 12:16 GPS ok 3 2015-09-04 - 12:18 GPS ok 4 2015-09-04 - 12:20 GPS ok 5 2015-09-04 - 12:22 GPS ok 6 2015-09-04 - 12:24 GPS ok 7 2015-09-04 - 12:26 GPS ok 8 2015-09-04 - 12:28 GPS ok 9 2015-09-04 - 12:30 GPS ok 10 2015-09-04 - 12:32 GPS ok 11 2015-09-04 - 12:34 GPS ok ... 31 2015-09-04 - 13:14 GPS ok 32 2015-09-04 - 13:16 GPS ok 33 2015-09-04 - 13:18 GPS ok 34 2015-09-04 - 13:20 GPS ok 35 2015-09-04 - 13:22 GPS ok 36 2015-09-04 - 13:24 GPS ok 37 2015-09-04 - 13:26 GPS ok (entering Doze mode some time after) 38 2015-09-04 - 13:42 GPS failed, active millis: 60174 (idle) 39 2015-09-04 - 13:57 GPS failed, active millis: 60128 (idle) 40 2015-09-04 - 14:12 GPS failed, active millis: 60122 (idle) 41 2015-09-04 - 14:16 GPS ok (idle maintenance) 42 2015-09-04 - 14:18 GPS ok (idle maintenance) 43 2015-09-04 - 14:20 GPS ok (idle maintenance) 44 2015-09-04 - 14:22 GPS ok (idle maintenance) 45 2015-09-04 - 14:38 GPS failed, active millis: 60143 (idle) 46 2015-09-04 - 14:53 GPS failed, active millis: 60122 (idle) 47 2015-09-04 - 15:08 GPS failed, active millis: 60068 (idle) 48 2015-09-04 - 15:23 GPS failed, active millis: 60138 (idle) 49 2015-09-04 - 15:38 GPS failed, active millis: 60140 (idle) 50 2015-09-04 - 15:53 GPS failed, active millis: 60131 (idle) 51 2015-09-04 - 16:08 GPS failed, active millis: 60185 (idle) 52 2015-09-04 - 16:12 GPS ok (ending Doze mode - power button on) 

Теперь, когда я снова посмотрел на свои журналы, я заметил очень странное поведение: тот же тест с «игнорированием оптимизации» ВЫКЛ показал в основном идентичные результаты (как и должно быть), но большую часть времени тайм-аут работал не так, как ожидалось, я получил ‘Active millis’ в диапазоне ~ 330000 (~ 5 раз тайм-аут) или даже ~ 580000 (~ 10 раз тайм-аут) в режиме ожидания. Это странное поведение, которое я не могу объяснить, но, похоже, показывает, что на самом деле есть некоторый эффект настройки «игнорировать оптимизации» в режиме Doze.

Изменить: «странное» поведение, описанное выше, только что задокументировано : только при включенном «игнорировании оптимизации» вы можете провести частичный wakelock в режиме ожидания Doze.

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

То, как я вижу это JobScheduler, – это способ планирования планирования, фоновых задач и т. Д. В будущем. Отбирает некоторый контроль от разработчиков, хотя, но это тот вызов, который, как я полагаю, ребята взяли за батареи. Это больше похоже на «триггер и надежду, что все будет происходить более или менее вовремя».

Подойдя к вашему прецеденту, JobScheduler имеет обратный вызов onStopJob, чтобы узнать, когда прекращено выполнение вашего задания [по какой-либо причине – скажем, Wi-Fi был переключен], вам нужно предпринять соответствующие действия, например, перепланировать вашу работу для следующего окна обслуживания. Из документов:

Одно немедленное последствие – то, что система прекратит держать wakelock для вас.

Как отключить функцию Doze для определенных приложений в Android 6.0

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

Приостановленные приложения также не могут подключаться к Интернету, однако сам мобильный девайс в режиме Doze будет периодически соединяться с удаленным сервером Google (так называемое «окно обслуживания»), чтобы получить уведомления о состоявшихся событиях. Уведомления приложений, которые их разработчики относят к категории высокоприоритетных, устройство показывать будет чаще (но не чаще, чем один раз в 15 минут), низкоприоритетные, соответственно, реже.

Однако, если в режиме Doze смартфон вообще не отображает уведомление от какого-нибудь важного приложения, либо отображает, но недостаточно часто, то в таком случае надо немножко поднастроить дежурный список программ функции Doze в настройках Aндроида.

Сделать это можно следующим образом:

  • заходим в «Настройки» устройства, потом — в «Батарея«;
  • открываем всплывающее меню (тапаем по трем точкам в правом верхнем углу экрана) и выбираем «Оптимизация батареи«;
  • сверху жмем «Все приложения», далее в списке находим название того, которое должно работать и в режиме Doze, тапаем по нему, в появившемся окошке выбираем «Не оптимизировать«.

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

Как отключить функцию Doze для определенных приложений в Android 6.0

Как отключить функцию Doze для определенных приложений в Android 6.0

Doze Mode — Настройка BIOS

Опция Doze Mode позволяет установить время простоя ПК, после которого система перейдет в первую стадию энергопотребления Doze.

 

Значения опции:

Disable – данный тип энергосбережения отключен;

1 Min, 2 Min, 4 Min, 6 Min, 8 Min, 10 Min, 20 Min, 30 Min, 40 Min, 1 Hour.

 

Примечание 1. S1 (Power On Suspend, POS, Doze) – режим энергосбережения, при котором отключается монитор, винчестер, но на центральный процессор и ОЗУ (модули оперативной памяти) питание подается, снижается частота системной шины. Процессорные кэши сброшены, процессоры не выполняют инструкции, отключен генератор тактовой частоты ЦП.

 

Более подробно о режимах энергосбережения Вы можете узнать здесь.



Еще по настройке БИОС (БИОЗ) плат:


  • Опция Throttle Doze позволяет понижать тактовую частоту ЦП (в про…


  • Опция Suspend-to-RAM Capability позволяет использовать в качестве…


  • Опция Suspend Power Saving Type отвечает за переключение процессо…


  • Опция Standby CPU Speed позволяет изменить тактовую частоту ЦП пр…


  • С помощью опции Save To Disk при переходе в режим энергосбережени…

Как управлять режимом дремоты в Android Marshmallow

Google добавил еще одно оружие в арсенал пользователей Android, которые борются за максимальное время автономной работы своих устройств. Режим дремоты, основная функция Android Marshmallow, обещает продлить срок службы телефона без подзарядки.

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

БОЛЬШЕ: Смартфоны с максимальным временем автономной работы

Самое лучшее в режиме Doze Mode — это то, что вам не нужно предпринимать никаких действий, чтобы воспользоваться его преимуществами. Однако у вас есть возможность отключить режим сна для определенных приложений. Это пригодится, если у вас есть приложение, которое вы считаете критически важным и хотите всегда знать, когда есть какое-либо уведомление.

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

1. Откройте «Настройки».

2. Коснитесь Батарея. На этом экране отображается текущий статус аккумулятора, а также время использования с момента последней полной зарядки.

3. Нажмите кнопку «Параметры» в верхнем правом углу — три вертикальные точки — и выберите «Оптимизация батареи» из следующего списка параметров.

4. Нажмите «Не оптимизировано» и выберите «Все приложения».

5. Выберите приложение, которое вы хотите исключить из режима Doze. В этом примере я выбираю Входящие.

6. В появившемся диалоговом окне нажмите «Не оптимизировать», а затем нажмите «Готово».

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

,

Как проверить Doze Mode на Android?

Переполнение стека

  1. Около
  2. Товары

  3. Для команд
  1. Переполнение стека
    Общественные вопросы и ответы

  2. Переполнение стека для команд
    Где разработчики и технологи делятся частными знаниями с коллегами

  3. работы
    Программирование и связанные с ним технические возможности карьерного роста

  4. Талант
    Нанимайте технических специалистов и создавайте свой бренд работодателя

  5. реклама
    Обратитесь к разработчикам и технологам со всего мира

  6. О компании

,

java — Как добавить приложение в белый список в режиме сна Android 6.0

Переполнение стека

  1. Около
  2. Товары

  3. Для команд
  1. Переполнение стека
    Общественные вопросы и ответы

  2. Переполнение стека для команд
    Где разработчики и технологи делятся частными знаниями с коллегами

  3. работы
    Программирование и связанные с ним технические возможности карьерного роста

  4. Талант
    Нанимайте технических специалистов и создавайте свой бренд работодателя

  5. реклама
    Обратитесь к разработчикам и технологам со всего мира

  6. О компании

,

Diving into Doze Mode для разработчиков — агентство по разработке цифровых продуктов

Последние версии Android были сосредоточены на улучшении производительности устройства, и одним из самых больших улучшений стало добавление режима Doze Mode в Android Marshmallow и Nougat. В предыдущем посте мы говорили о фоновых планировщиках в Android, кратко упомянув об эффектах режима Doze Mode в Android Marshmallow. В этом посте более подробно рассматривается режим Doze Mode, изменения, которые происходят с Android Nougat, и то, что вы можете сделать, чтобы правильно адаптироваться к режиму Doze Mode.

Что такое режим дремоты?

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

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

Когда Android дремлет?

Первое, что нам нужно понять, — это различные «этапы» режима Doze Mode и время, когда они будут активны на устройствах с Android Nougat.Основная стадия Doze (называемая в этой статье Deep-Doze) была представлена ​​в Android Marshmallow и активируется, когда устройство не заряжается, экран выключен и устройство полностью неподвижно. Android проверяет выполнение этих условий, ожидает примерно 30 минут, чтобы убедиться, что телефон не изменит условия, а затем переходит в режим экономии заряда батареи Deep-Doze. При изменении любого из этих условий устройство выйдет из режима Deep-Doze и ограничения будут сняты.Чтобы по-прежнему доставлять пользователям приятные ощущения, когда они возвращаются к своему телефону, Deep-Doze предоставляет короткие периоды обслуживания, когда приложения могут синхронизировать свои последние данные. Эти окна обслуживания увеличиваются, и чем дольше пользователь находится в режиме Deep-Doze, тем выше экономия энергии. На следующей диаграмме показаны эти эффекты в Android Marshmallow:

Deep Doze Mode in Android Nougat

Оранжевые полосы представляют сетевую активность на устройстве, а зеленая часть — когда применяются ограничения Deep-Doze.Оранжевые полосы в виде «штрих-кода» представляют сетевую активность, запускаемую в случайные моменты времени из различных приложений на телефоне. Однако в режиме Deep-Doze предусмотрены более контролируемые периоды обслуживания, в которых фоновая работа приложений объединяется вместе для работы в более компактный период времени.

Android Nougat изменяет эту формулу, добавляя более легкую версию Doze, которая не требует, чтобы устройство было полностью стационарным или ждало столько времени, чтобы активировать.Я буду называть эту облегченную версию Doze Light-Doze здесь. Light-Doze начинает работать вскоре после того, как экран выключен, и устройство не заряжается, ожидая всего пару минут, прежде чем применить ограничения, чтобы убедиться, что пользователь перестал использовать свой телефон. Light-Doze имеет меньше ограничений для экономии заряда батареи, поэтому период между окнами обслуживания синхронизации данных короче. Цель состоит в том, чтобы обеспечить более быстрый переход в режим дремоты с меньшим воздействием перед переходом в режим глубокой дремоты.

Если в режиме легкой дремоты устройство оставалось неподвижным, система переведет устройство в режим глубокой дремоты и соответствующие окна обслуживания. Точно так же Light-Doze будет прерываться, когда устройство подключено или экран включен. Также важно отметить, что Deep-Doze можно прервать и перейти к Light-Doze, если устройство перестает оставаться в неподвижном состоянии, но все еще не заряжается с выключенным экраном.

Google предоставил несколько диаграмм, чтобы помочь визуализировать некоторые из этих ситуаций, первая из которых показывает, как Light-Doze становится активным и неактивным:

Light Doze Mode in Android Nougat

На этой диаграмме мы переходим в режим Light-Doze через пару минут, и окна обслуживания встречаются чаще, чем то, что мы видели с Deep-Doze.Эта диаграмма показывает Light-Doze как немного более высокий и более светлый оттенок зеленого, чтобы обозначить меньшие ограничения по сравнению с Deep-Doze. Более интересная ситуация заключается в том, как устройство перейдет в режим Deep-Doze с Nougat:

.

Light Doze to Deep Doze Mode

Несмотря на то, что устройство соответствует всем трем критериям (выключенный экран, питание от батареи и стационарность), ОС сначала перейдет в режим Light-Doze, подтверждая, что устройство действительно находилось в неподвижном состоянии в течение достаточного времени.

Этот период времени соответствует второй группе действий со «штрих-кодом», которые мы видели в нашем первом изображении Deep-Doze из Android Marshmallow.По прошествии этого периода запускается режим Deep-Doze, и мы начинаем видеть, что применяются большие ограничения по экономии заряда батареи.

Что делает Doze?

Итак, теперь, когда мы рассмотрели, когда вступают в силу Deep-Doze и Light-Doze, нам нужно взглянуть на фактические ограничения, которые он накладывает на приложения на устройстве. Поведение Light-Doze — это подмножество поведения Deep-Doze: доступ к сети отключен для всех приложений, и задания будут отложены из JobScheduler и Sync из Sync-Adapters.

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

Когда устройство переходит в режим Deep-Doze, применяется пара дополнительных ограничений. Тревоги AlarmManager будут отложены, как и задания и синхронизация в режиме Light-Doze — удерживаются до тех пор, пока устройство не перейдет в окно обслуживания или полностью не выйдет из режима Doze. Операционная система также будет игнорировать любые попытки включения блокировки, предпринимаемые приложением, что означает, что работа должна быть завершена в течение периода обслуживания, поскольку ваша блокировка пробуждения будет проигнорирована, когда она вернется в режим Doze. Наконец, Deep-Doze также остановит систему от сканирования Wi-Fi и GPS, уменьшая количество событий местоположения от устройства, обнаруживающего точки доступа Wi-Fi.

Прерывистая доза

Итак, теперь, когда вы понимаете, какое влияние Doze может оказывать на ваше приложение, вы можете подумать: «Как выживет пользователь, если мне не разрешено выполнять фоновую работу и уведомлять пользователя о событиях, когда я захочу ?!»

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

Если вам нужно обеспечить немедленную доставку уведомления, тогда Firebase Cloud Messaging (FCM, ранее известный как Google Cloud Messaging) может сделать это без изменения исходного кода вашего приложения.

FCM имеет возможность отправлять уведомление на устройство в режиме ожидания, просто установив сообщение с высоким приоритетом.Google предупреждает, что это следует зарезервировать для «только в том случае, если сообщение критично по времени и требует немедленного взаимодействия с пользователем», поскольку это прервет режим дремоты и предоставит временный доступ к сетевым службам и частичную блокировку пробуждения только для вашего приложения.

Если вы хотите, чтобы некоторая фоновая работа выполнялась, когда устройство находится в режиме ожидания, но еще не в периоде обслуживания, AlarmManager также имеет некоторые параметры для вашего приложения. Методы AlarmManager.setAndAllowWhileIdle () и AlarmManager.setExactAndAllowWhileIdle () позволит PendingIntent сработать, даже если устройство находится в режиме ожидания («бездействием» считается время, в течение которого режим ожидания активен).

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

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

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

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

Или, если вы запросили разрешение REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, вы можете напрямую предложить пользователю в диалоговом окне отключить оптимизацию для вашего приложения, не требуя от пользователя поиска вашего приложения, запустив намерение с действием ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS.

Обратите внимание, что в Android Nougat Developer Preview 4 приложению «Настройки» требуется принудительное закрытие для отражения изменений, внесенных в этом диалоговом окне. Также обратите внимание, что они предназначены только для крайних случаев и не одобряются Google. В документации Doze говорится: «Примечание. Политика Google Play запрещает приложениям запрашивать прямое исключение из функций управления питанием в Android 6.0+ (Doze и режим ожидания приложений), если это не отрицательно сказывается на основной функции приложения».

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

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

Однако в Android Marshmallow есть ошибка, которая требует, чтобы служба переднего плана находилась в отдельном процессе от всего остального кода активности, описанного здесь.Планируется исправить в Nougat.

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

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

Testing Doze на вашем устройстве

Теперь, когда у вас есть больше информации о Doze и о том, какое влияние она оказывает на ваше устройство, вы можете протестировать свое приложение, чтобы убедиться, что ваше устройство работает правильно.К счастью, Android упростил это, не дожидаясь, пока ваше устройство перейдет в режим дремоты, с помощью пары команд adb. Ниже перечислены шаги для тестирования вашего устройства. Обратите внимание, что они предполагают, что устройство работает под управлением Android Nougat Developer Preview 4 или более поздней версии для доступа к Light-Doze:

.

  1. Подключите устройство к машине разработки и установите приложение.
  2. Запустите приложение и оставьте его активным.
  3. Отключить экран устройства. (Приложение остается активным.)
  4. Заставьте систему циклически переключаться между режимами дремоты, выполнив следующие команды:
  $ adb shell dumpsys отключение батареи
$ adb shell dumpsys deviceidle step [светлый | глубокий]
  

Первая команда позволит системе думать, что она отключена, чтобы вы могли продолжить тестирование при подключении к USB для дальнейших команд adb (в противном случае режим Doze никогда не активируется). Вторая команда проведет ваше устройство через каждую из проверок перед бездействием, распечатывая текущее состояние после каждого шага.По умолчанию команда будет проходить через полные состояния дремоты и не беспокоиться о легкой дремоте. Вы можете добавить light или deep в конце, чтобы указать, что вы хотите пройти через соответствующие режимы дремоты. Когда устройство достигает IDLE , пошаговая функция будет переключаться между IDLE и IDLE_MAINTENANCE с каждым шагом.

Вы можете запросить текущее состояние в любой момент, позвонив по телефону:

  $ adb shell dumpsys deviceidle get [свет | глубина | сила | экран | зарядка | сеть]
  

Начиная с Android Nougat Developer Preview 4, Doze имеет следующие состояния:

  Свет: АКТИВНЫЙ -> ХОЛОСТОЙ ХОД -> IDLE_MAINTENANCE -> ПЕРЕХОД
Deep: ACTIVE -> IDLE_PENDING -> SENSING -> LOCATING -> IDLE -> IDLE_MAINTENANCE
  

Состояние OVERRIDE активируется, когда Deep-Doze находится в режимах IDLE или IDLE_MAINTENANCE , потому что Light-Doze не действует после того, как устройство перешло в режим Deep-Doze.Устройство выйдет из режима Doze, когда вы снова включите экран, но обязательно выполните следующую команду, чтобы ваше устройство правильно отображало процент заряда батареи и состояние USB-соединения после завершения тестирования:

  $ adb shell dumpsys сброс батареи
  

Дополнительная информация

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

Ищете дополнительную информацию о Doze? Вот некоторые ресурсы, которые мне помогли при погружении в Doze:

Надеюсь, я развенчал мифы о том, что Doze предлагает, и о новых оптимизациях, добавленных в Android Nougat. Я большой поклонник того, что Doze Mode сделал для заряда аккумулятора моего устройства, и мне не терпится узнать, что будет дальше!

,

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

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