В помощь мобильному разработчику
Android

Понимание работы Android Doze

Александр Алексеев

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

 

Время, когда девайсы переходят в режим Doze

Как это и следует из её названия, функция Doze запускается в тот момент, когда пользовательское устройство отключено от источника питания и девайс не испpicture1ользуется. Ранее Doze активизировалась только тогда, когда устройство оставалось неподвижным
с выключенным экраном в течение заданного промежутка времени, но с выходом Android 7.0 у Doze появились определенные состояния, при которых эта функция может запускаться, даже если устройство не находится в стационарном положении.

 

Doze — первый уровень

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

doze-level-1

 

Doze — второй уровень

Если девайсом никто не пользуется и он лежит без движения или когда на нём уже запустился первый уровень Doze, и устройство продолжает оставаться неподвижным, тогда активизируется второй уровень Doze, утверждая дополнительные ограничения. Второй уровень является стандартным режимом Doze на Android Marshmallow, при нём игнорируются все Wakelocks; запуск всех Alarms, Syncs и Jobs откладывается, и, кроме этого, ограничивается доступ в интернет и сканирование сетей GPS и Wi-Fi.

doze-diagram-2

Если какой-либо из режимов Doze активен, система пробуждает приложения через определенные промежутки времени, позволяя им осуществлять свои привычные операции. Если Ваше приложение задействует любой из этих API-интерфейсов, подвергающихся ограничению, важно понимать, что оно может в определённое время не выполнять тех действий, которых Вы от него ожидаете. Хотя Вы можете думать, что приложение работает правильно — вот почему важно разбираться в том, как Doze влияет на функциональность Вашего проекта. Тут следует ещё кое-что уточнить: в работе функции Doze есть одна лазейка, касающаяся Push-уведомления и сообщений от Google Cloud Messaging. Все послания с пометкой «высокий приоритет» будут по-прежнему доходить до устройства, несмотря на активность функции Doze.

 

Тестирование корректности работы приложений в режиме Doze

Вы легко можете оценить корректность работы приложения при запущенной функции Doze, проведя тесты на физическом устройстве или эмуляторе под управлением Android 6.0 (API Level 23) или выше. Просто запустите приложение, оставьте его активным, и выключите экран устройства (убедившись, что приложение остаётся активным). Вам не нужно ждать, пока Doze запустится; вы можете самостоятельно активизировать Doze с помощью командной строки ADB путём ввода двух простых команд:

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

 

Сигнальные оповещения

Многие приложения могут пользоваться AlarmManager для планирования таких событий, как календарные уведомления. Чтобы избежать возможных ошибок, к AlarmManager в API 23 были добавлены два новых метода: SetAndAllowWhileIdle и SetExactAndAllowWhileIdle. Они очень похожи, но SetExact позволяет сигнальному оповещению срабатывать в конкретный установленный промежуток времени вместо случайного. Эти сигнальные оповещения должны использоваться экономно, и им по-прежнему позволяется срабатывать только один раз в каждые 9 минут в одном приложении.

 

Используйте преимущества диспетчера заданий

Новый API-интерфейс — диспетчер заданий, введённый в Android 5.0, теперь является частью сервисов Google Play в качестве GcmNetworkManager. Он дает разработчикам возможность планировать фоновые задачи и позволяет системе Android корректно запускать их, когда она начинает совмещение ряда задач для повышения эффективности работы приложений и экономии заряда аккумулятора, что отлично подходит для единовременных или периодических заданий. Вы можете узнать больше о планировщике заданий в наших примерах и в блоге GcmNetworkManager.

 

Узнайте больше

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

Автор: James Montemagno
ИсточникОфициальный блог Xamarin

Александр Алексеев
Александр Алексеев

Xamarin - разработчик. Работаю с .NET платформой с 2012 года, программирую в основном с использованием C#. За это время успел поработать с ASP.NET, Entity Framework, MSSQL, Git

Логотип Realm

Написать ответ