- Android doze mode adb
- Читайте на здоровье!
- Doze Mode
- Режим Standby
- Testing your Android app on Doze Mode
- Android doze mode adb
- Время, когда девайсы переходят в режим Doze
- Doze — первый уровень
- Doze — второй уровень
- Тестирование корректности работы приложений в режиме Doze
- WinDroidWiz
- Rare and useful tech Tricks, Tweaks, Tips and More…
- [Exclusive|No Root|No App] Force Enable/Disable ‘DOZE’
- If your phone is running Android 6(Marshmallow) or above, then you must be knowing that it comes with a new battery conserving feature – DOZE.
- Since apps won’t be using the phone’s resources continuously as they do otherwise, DOZE helps conserve your phone’s juice.
Android doze mode adb
Освой программирование играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей — и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Читайте на здоровье!
Статья проплачена кошками — всемирно известными производителями котят.
Если статья вам понравилась, то можете поддержать проект.
Новые алгоритмы сна под названием Doze помогут вашему устройству работать на одной зарядке дольше: в моменты, когда аппарат долго лежит неподвижно, не подключен к зарядке и его дисплей не включается для отображения уведомлений, все приложения ставятся на паузу (App Standby), передача данных минимизируется, процессор переходит в энергосберегающий режим, все синхронизации и прочие любители что-нибудь сделать, пока телефон «бездельничает» отправляются в сон.
Впервые этот режим был внедрён в Android Marshmallow и в следующих версиях требования ужесточаются всё больше и больше.
В спящем режиме не выполняются сетевые запросы, кроме GCM с высоким приоритетом. Также могут блокироваться операции синхронизации, задачи по сигнализации событий, сканирование сетей Wi-Fi, работа GPS.
Для особо важных задач можно запустить метод setAndAllowWhileIdle() от AlarmManager, но не чаше одного раза в 15 минут.
Doze Mode
Когда устройство на Android Marshmallow лежит без движения и без зарядки, спустя час оно переходит в Doze Mode. Режим отключки, когда почти все приложения перестают жрать батарею. Это происходит не сразу, а по шагам:
- ACTIVE — Устройство используется или на зарядке
- INACTIVE — Устройство недавно вышло из активного режима (пользователь выключил экран, выдернул зарядку и т.п.)
- . 30 минут
- IDLE_PENDING — Устройство готовится перейти в режим ожидания
- . 30 минут
- IDLE — Устройство в режиме бездействия
- IDLE_MAINTENANCE — Открыто короткое окно, чтобы приложения выполнили свою работу
Если ваше приложение использует различные задачи, которые могут выполняться в разное время, то нужно обязательно протестировать поведение программы при включении спящего режима. Для этого можно воспользоваться специальными командами, чтобы не дожидаться наступления режима Doze.
Например, можно ввести команду отключения питания. Если ваше устройство подключено к компьютеру, то после этой команды вы увидите, что значок зарядки сменится на значок работы от батареи.
Далее вы можете увидеть состояние устройства.
Команда будет возвращать следующие строки в разное время.
Вернуть батарею обратно в обычное состояние зарядки от сети.
Увидеть все доступные команды.
В момент, когда устройство переходит в состояние IDLE:
- Доступ приложению к сети отключен, пока приложение не получит high-priority GCM-push
- Система игнорирует Wake Lock. Приложения могут сколько угодно пытаться запросить пробуждение процессора — они их не получат
- Запланированные Alarm в AlarmManager не будут вызываться, кроме тех, которые будут обновлены с помощью setAndAllowWhileIdle()
- Система не производит поиска сетей Wi-Fi
- NetworkPolicyManagerService: пропускает только приложения из белого списка
- JobSchedulerService: все текущие задачи отменяются. Новые откладываются до пробуждения
- SyncManager: все текущие отменяются, новые откладываются до пробуждения
- PowerManagerService: только задачи приложений из белого списка
Соответственно, если наше приложение является чатом, то мы можем отправить с сервера push с полем priority = high. А если у нас приложение будильник, то мы должны обязательно вызвать setAndAllowWhileIdle() или setExactAndAllowWhileIdle().
Во многих других случаях мы вообще не должны об этом переживать, после того, как пользователь возьмет устройство в руки, все заснувшие объекты проснутся и сделают свою работу.
Режим Standby
Если у приложения есть фоновые задачи, но приложение простаивает, то включается режим Standby.
Если приложение простаивает долгое время, то система разрешит делать ему запрос в сеть один раз в сутки.
Ремжим App Standby отправляет в изоляцию приложения, которые не подходят под условия:
- Пользователь явно запустил приложение
- Приложение имеет процесс, работающий в данный момент на переднем плане (Activity или foreground service, или используется другая активность или foreground service)
- Приложение создало уведомление, которое висит в списке уведомлений
- Пользователь принудительно добавил приложение в список исключений оптимизации в настройках системы
Этот режим тоже можно тестировать с помощью команд.
Разбудить приложение можно командой.
Проверить статус приложения:
Например, может вернуться строка.
Есть специальный белый список Whitelist, в который пользователь может добавить исключения. Приложениям из белого списка не страшны ни Doze Mode ни App Standby.
Пользователь может настроить нужные приложения, чтобы они не включали режим ожидания Standby. Для этого идём в Настройки | Приложения, нажимаем на значок шестерёнки и выбираем пункт Экономия заряда батареи. В выпадающем списке Не экономят заряд можно увидеть программы, которые не используют режим ожидания. Переключитесь на Все приложения и выберите нужно приложение из списка. В диалоговом окне можете установить режим Не экономить.
Можно программно узнать, находится ли приложение в «белом списке» приложений, которым разрешено не экономить заряд. Нужно указать имя пакета приложения (не обязательно указывать своё приложение).
Если находится, то вернёт true, иначе — false.
Сами вы не сможете добавить своё приложение в белый список, это может сделать только пользователь вручную. Но вы можете ему показать нужный экран настройки, чтобы он его не искал.
Более агрессивный способ, когда вы явно вызывает диалоговое окно для добавления приложения в белый список.
В манифесте следует прописать разрешение.
Если приложение уже находится в белом списке, то диалоговое окно не появится.
Источник
Testing your Android app on Doze Mode
Feb 1, 2017 · 2 min read
A while ago Android Nougat hit the market. Recently, the most popular OEMs have started releasing the Nougat updates for their flagships.
There are 2 types of doze modes. Let me call them LIGHT-DOZE and DEEP-DOZE modes.
Basic invocation points for both the modes are:
- Display Off
- Battery not on charging mode
- Display Off
- Battery not on charging mode
- Device stationary for
How does this affect your Android application? If your app does any of the following, you need to make a few changes to make it work seamlessly on Nougat.
- Syncs periodically irrespective of the device’s battery status
- Fires alarms to perform certain background tasks
- Needs wake locks for performing tasks
How do you find out how your app behaves on Nougat? You will be needing the following:
- Android Nougat physical device or an emulator
- ADB
Follow t he following steps to make the device cycle through LIGHT and DEEP-DOZE modes
- Connect the device to your machine having ADB
- Run your app and leave it active
- Turn off the display with the app running
- Make the device cycle through the doze modes
There are multiple ADB commands that will help us test the application:
- Unplugging the battery while being connected to the machine:
- Whether you are using an emulator or a physical device, you will need to unplug the battery to allow doze mode to kick in.
- This command will do the needful. Observe that the battery is no longer charging.
- But be careful to reset this once you are done testing. Use the following command to reset.
2. The next step is to make the device cycle through light and deep doze modes
- This command will step the device through each of the checks before going into idle state. It will also print out the current state after each step.
You can query the current state by using this command:
Each of the doze modes will have multiple states.
Once the DEEP-DOZE mode has reached the IDLE state, LIGHT-DOZE mode will have no effect and hence the state is represented as OVERRIDE.
Also, one cool testing app to capture and log the current state when an alarm or job is kicked in. This app logs when the device moves to IDLE state. Thanks to Paul Turner for this.
Источник
Android doze mode adb
Операционная система Android позволяет разработчикам создавать комплексные приложения, которые используют преимущества сервисов фоновой обработки, планирования оповещений и синхронизации данных. Поскольку пользователи устанавливают на свои устройства множество приложений, сейчас стал очень актуальным вопрос того, чтобы вся эта масса приложений не замедляла пользовательские девайсы и не расходовала заряд их аккумуляторов. Именно поэтому Google представил в Android Marshmallow функцию Doze, а затем расширил сферу её охвата в Android Nougat.
Время, когда девайсы переходят в режим Doze
Как это и следует из её названия, функция Doze запускается в тот момент, когда пользовательское устройство отключено от источника питания и девайс не используется. Ранее Doze активизировалась только тогда, когда устройство оставалось неподвижным
с выключенным экраном в течение заданного промежутка времени, но с выходом Android 7.0 у Doze появились определенные состояния, при которых эта функция может запускаться, даже если устройство не находится в стационарном положении.
Doze — первый уровень
В Android 7.0 функция Doze может запускаться в любое время, когда девайс работает от аккумулятора, а экран аппарата выключен. По истечении некоторого времени приложения отключаются от сети, и все функции синхронизации, а также фоновые задачи откладываются на определенный период обслуживания, длительность которого устанавливается системой Android. Нормальная работа возобновляется только тогда, когда пользователь ставит свой смартфон на зарядку или включает его экран. Ниже на рисунке иллюстрируется первый уровень функции Doze на Android 7.0:
Doze — второй уровень
Если девайсом никто не пользуется и он лежит без движения или когда на нём уже запустился первый уровень Doze, и устройство продолжает оставаться неподвижным, тогда активизируется второй уровень Doze, утверждая дополнительные ограничения. Второй уровень является стандартным режимом Doze на Android Marshmallow, при нём игнорируются все Wakelocks; запуск всех Alarms, Syncs и Jobs откладывается, и, кроме этого, ограничивается доступ в интернет и сканирование сетей GPS и Wi-Fi.
Если какой-либо из режимов Doze активен, система пробуждает приложения через определенные промежутки времени, позволяя им осуществлять свои привычные операции. Если Ваше приложение задействует любой из этих API-интерфейсов, подвергающихся ограничению, важно понимать, что оно может в определённое время не выполнять тех действий, которых Вы от него ожидаете. Хотя Вы можете думать, что приложение работает правильно — вот почему важно разбираться в том, как Doze влияет на функциональность Вашего проекта. Тут следует ещё кое-что уточнить: в работе функции Doze есть одна лазейка, касающаяся Push-уведомления и сообщений от Google Cloud Messaging. Все послания с пометкой «высокий приоритет» будут по-прежнему доходить до устройства, несмотря на активность функции Doze.
Тестирование корректности работы приложений в режиме Doze
Вы легко можете оценить корректность работы приложения при запущенной функции Doze, проведя тесты на физическом устройстве или эмуляторе под управлением Android 6.0 (API Level 23) или выше. Просто запустите приложение, оставьте его активным, и выключите экран устройства (убедившись, что приложение остаётся активным). Вам не нужно ждать, пока Doze запустится; вы можете самостоятельно активизировать Doze с помощью командной строки ADB путём ввода двух простых команд:
Источник
WinDroidWiz
Rare and useful tech Tricks, Tweaks, Tips and More…
[Exclusive|No Root|No App] Force Enable/Disable ‘DOZE’
If your phone is running Android 6(Marshmallow) or above, then you must be knowing that it comes with a new battery conserving feature – DOZE.
For those who don’t know what DOZE is – it’s essentially mode that your Android phone enters when it’s idle(screen OFF). In DOZE mode, apps are restricted from excessive background activity and are instead given some ‘maintenance windows’ to do their work.
Since apps won’t be using the phone’s resources continuously as they do otherwise, DOZE helps conserve your phone’s juice.
Now that you know what DOZE is and the perk of having it, you can obviously tell that it best to have it enabled. And that’s how it is, by default.
- have upgraded from a previous Android version and are unable to see any improvement in battery life.
- using Marshmallow or Nougat but are skeptic about extraordinary battery life that it promises.
- [want to make sure such nice feature is enabled]
then, there’s good chance that DOZE is disabled on your phone for whatever reasons. Here’s the way to fix without having any apps on the phone or even root access. Follow the steps below –
- Download Minimal ADB and install it on your PC
- Launch the command interface by running cmd-here.exe from the installed folder.
- Connect your phone to PC via USB after enabling USB debugging on your phone
If Developer options isn’t available, navigate: Settings
>About phone then tap Build number 7 times.
- Ensure that the Developer options switch (located in the upper-right) is turned on .
- Tap USB debugging to turn on or off .
- If prompted “Allow USB debugging?”, tap OK to confirm.
adb shell dumpsys deviceidle enable
Now you should a message saying that Deep idle mode and Light idle mode are enabled as shown above, indicating DOZE is activated. If you want to disable DOZE mode, just repeat the same command by replacing enable with disable.(you wouldn’t do that, would you?)
If you’ve followed all the 6 steps correctly, then congrats! You have enabled DOZE on your Android device, this time for sure!
- To ensure all apps are optimized with DOZE : Go to Settings > Battery. Tap 3-dots menu at the top right corner > Battery optimization. Next, under ‘Not optimized’ apps list, tap on all possible apps and select ‘Optimize’ for each.
- You can also force your phone to enter DOZE mode instantaneously instead of its automatic schedule. I’m not sure how much of use this can be when the screen is on but its good to know. The command to use for this is adb shell dumpsys deviceidle force-idle
- Now that you know how to toggle the DOZE mode, you can try to see the difference in battery life yourself. Turn off DOZE when your phone’s battery is full the next time and use until battery is low. See the battery usage history in Settings and save screenshot for later. Turn on DOZE the next time you charge it fully and try to have similar usage profile like last time(without DOZE). Compare results and comment below if you find anything interesting.
Update : Here are my observations:
(Note: Subtract about 8 hours of idle time (overnight) in the first graph to understand it better)
Now, a little explanation about what these stats convey:
- Overall battery life is extended by atleast an hour when DOZE is on.
- Screen on time is much better when DOZE is enabled.
This confirms our theory that DOZE does a solid job at conserving battery.
I hope you’ve found this tutorial simple & useful. Still if you have any queries, drop them down below in the comments section. Also, share this tutorial with your friends who may also benefit from this. Lastly, you can check out the facebook page if you don’t want to miss more cool stuff like this.
Источник