В этой статье мы рассмотрим три самых важных изменения в новом 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 — Открыто короткое окно, чтобы приложения выполнили свою работу Мы можем продебажить наши приложения, переключаясь последовательно между этими шагами с помощью:
$ adb shell dumpsys deviceidle step
В момент, когда устройство переходит в состояние IDLE:
- Доступ приложению к сети отключен, пока приложение не получит high-priority GCM-push.
- Система игнорирует Wake lock’и. Приложения могут сколько угодно пытаться запросить пробуждение процессора — они их не получат.
- Alarm’ы запланированные в AlarmManager не будут вызываться, кроме тех, которые будут обновлены с помощью setAndAllowWhileIdle().
- Система не производит поиска сетей Wi-Fi.
- NetworkPolicyManagerService: пропускает только приложения из белого списка.
- JobSchedulerService: все текущие задачи отменяются. Новые откладываются до пробуждения.
- SyncManager: все текущие отменяются, новые откладываются до пробуждения.
- PowerManagerService: только задачи приложений из белого списка вызовутся.
Соответственно, если наше приложение чат, то мы можем отправить с сервера push с полем priority = high. А если у нас приложение будильник, то мы должны обязательно вызвать для Alarm setAndAllowWhileIdle() или setExactAndAllowWhileIdle(). Во многих других случаях мы вообще не должны об этом переживать, после того, как пользователь возьмет устройство в руки, все заснувшие alarm’ы и SyncAdapter’ы проснутся и сделают свою работу. (Да-да я знаю, что после выхода из doze mode все начинает синкаться и даже Nexus 9 минуты две тормозит) Но не только при попадании устройство в Doze Mode наши приложения будут лишены возможности разряжать батарею. Второй режим под название App Standby отправляет в такую же изоляцию приложения, которые не подходят под условия:
- Пользователь явно запустил приложение.
- Приложение имеет процесс, работающий в данный момент на переднем плане (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, который покажет диалог на автоматическое добавление в вайтлист с разрешения пользователя. Подробнее: developer.android.com/intl/ru/training/monitoring-device-state/doze-standby.html#support_for_other_use_casesnewcircle.com/s/post/1739/2015/06/12/diving-into-android-m-doze Мы подобрались к самому известному изменению в Android Marshmallow. Более того это изменение требует от нас наибольшего вовлечения в перелопачивание кода приложения. Кратко говоря: халява кончилась. Да-да, каждый раз, когда наше приложение обращается, например, с запросом на местоположение пользователя, мы должны проверить, есть ли у приложения разрешение от пользователя на это действие. Если есть — обращаемся к нужным нам системным ресурсам, если нет — запрашиваем. Так же пользователь может навсегда приложению запретить доступ, тогда единственный наш шанс — это попросить его самого зайти в настройки и снять запрет, показав ему объясняющее сообщение, зачем нам нужен доступ. Стоит отметить, что Permissions в Android делятся на два типа:
- Нормальные разрешения, вроде доступа к сети и bluetooth.
- Опасные разрешения. В этот список входят разрешения на: календарь, камеру, контакты, местоположение, микрофон, телефон, сенсоры, смс и внешнее хранилище
Вот как раз все опасные разрешения мы и должны постоянно проверять, ибо пользователь может в любой момент их запретить. Да и при первом старте доступа у приложения к ним нет. Итак, последовательность наших шагов:
- Описать только PROTECTION_NORMAL запросы в manifest
- Пользователь их все подтвердит при установке
- Когда приложению нужен доступ к одному или нескольким разрешениям из группы опасных, проверить, нет ли разрешения
- Если разрешения нет — запросить
- Если разрешения не будет — объяснить, на что это повлияет
- Если разрешение получено — продолжить работу
Чтобы проверить доступность разрешения дергаем ContextCompat.checkSelfPermission (Context context, String permission). Чтобы запросить разрешения, показав системный диалог, вызываем ActivityCompat.requestPermissions(); Результат этого запроса придет в асинхронный колбэк в активити onRequestPermissionsResult(), в нем мы узнаем решение пользователя по каждому из запрошенных разрешений. Запрашивать лишь те разрешения, которые действительно нужны. До сих пор в Google Play находятся разработчики, которые запрашивают все подрядЕсли есть возможность, вместо запроса воспользоваться внешним Intent. Например, для фото или видео часто нет смысла встраивать камеру в приложение, гораздо проще воспользоваться внешним приложениемЗапрашивать разрешение, только перед тем, когда оно понадобится. Запрашивать при старте приложения все разрешения нелогично (из тех, которые нам нужны), их смысл как раз в том, что мы запрашиваем их в контексте их использования.Например, пользователю становится понятно зачем его банковскому клиенту доступ к контактам — чтобы выбрать одного при шаринге по ФИОПояснять пользователю, для чего запрашивается разрешение. Если пользователь все же запретил приложению доступ, а без него оно не может, оно должно максимально понятно объяснить, что без этого разрешения оно работать дальше не будет Подробнее: developer.android.com/intl/ru/training/permissions/requesting.html Подкаст о пермишенах: androidbackstage.blogspot.ru/2015/08/episode-33-permission-mission.html Семпл от Google: developer.android.com/intl/ru/samples/RuntimePermissions/index.html Мой семпл на github: github.com/nekdenis/Permissions_sample Сегодня мы поговорили о самых заметных изменениях в Android Marshmallow. Так же обязательно прочтите полностью вторую статью про остальные изменения и нововведения в Marshmallow. Спасибо за внимание и скорейшую оптимизацию ваших приложений под новый Android! 224 54.5k 224 Все мы знаем, что передача данных — одна из причин сильного расхода батареи. Если передача данных включена в течение всего дня, приложения смогут ее использовать даже при выключенном экране. Когда экран выключен, Doze может ограничивать прием или передачу данных отдельных приложений без отключения мобильной передачи данных или Wi-Fi. Это дает возможность продлить время использования телефона намного дольше.
Наша программа отличается от режима энергосбережения в Android Lollipop.1. Когда вы включаете режим энергосбережения в Android Lollipop, отключается активная передача данных и приложения могут обновиться лишь тогда, когда вы их используете. Doze лучше! Когда ваш экран включен, приложения продолжают нормальную работу. Вам не надо обновлять приложения вручную.2. Doze имеет поддержку, начиная с Android 4.1.Режим энергосбережения доступен только начиная с Android 5.0.
Наша программа отличается от режима Doze в Android 6.0 M.1. Функция Doze в Android M активна только тогда, когда телефонпланшет отключен от зарядки, не используется более чем 30 минут и отключен экран.Вы можете активировать нашу программу в любое время из меню приложений и это намного легче. 2. Наша программа поддерживает больше версий Android.В итоге, вы имеете более удобную и функциональную программу.
Как оставить приложение активным при выключенном экране? В следующем обновлении мы добавим активный список приложений. Приложения, добавленные в активный список, продолжают нормальную работу при выключенном экране.
Русский перевод:Aleksandr Ermin https://vk.com/alloyoba_etoty
Необходимые разрешения.Для активации функций мы установим VPN-соединение (это необходимо для блокировки передачи данных).Пожалуйста, разрешите установку VPN-соединения когда получите подсказку.
По всем проблемам и вопросам: G+ community: https://plus.google.com/u/0/communities/114251225240961092535Email: yirgalab@gmail.comО нас: https://www.tumblr.com/blog/yirgalab
itemprop=’image’ src=’https://trashbox.ru/apk_icons/616474_192.png’ class=image_microdata> | >Andrew_E, 27 июня 2016 — 11:15 |
Android 4.0+ Другие версии Когда экран выключен, Doze может ограничивать прием или передачу данных отдельных приложений без отключения мобильной передачи данных или Wi-Fi. Это дает возможность продлить время использования телефона намного дольше. Telegram-каналпротехнологиисинсайдамиирозыгрышами Наша программа отличается от режима энергосбережения в Android Lollipop.
- Когда вы включаете режим энергосбережения в Android Lollipop, отключается активная передача данных и приложения могут обновиться лишь тогда, когда вы их используете. Doze лучше! Когда ваш экран включен, приложения продолжают нормальную работу. Вам не надо обновлять приложения вручную.
- Doze имеет поддержку, начиная с Android 4.1. Режим энергосбережения доступен только начиная с Android 5.0.
Наша программа отличается от режима Doze в Android 6.0 M.
- Функция Doze в Android M активна только тогда, когда телефонпланшет отключен от зарядки, не используется более чем 30 минут и отключен экран. Вы можете активировать нашу программу в любое время из меню приложений и это намного легче.
- Наша программа поддерживает больше версий Android. В итоге, вы имеете более удобную и функциональную программу.
Как оставить приложение активным при выключенном экране? В следующем обновлении мы добавим активный список приложений. Приложения, добавленные в активный список, продолжают нормальную работу при выключенном экране. Telegram-каналпротехнологиисинсайдамиирозыгрышами Чтобы увидеть более ранние версии, войдите на сайт Последнее изменение: 1 февраля 2017 — 22:41
Приложение Doze – энергосбережение для android представляет из себя очень полезный инструмент, способный продлить работу вашего устройства в режиме автономного режима.
Наверняка всем известно, что именно передача данных является одним из основных фактов на быстрое разряжение аккумулятора вашего устройства, что соответственно приводит к потере энергии и быстрому выходу ее из строя. Разработчики программы Doze – энергосбережение на android за основу взяли режим энергосбережения используемый в операционной системе Android 5.0 Lollipop, но переделали его и сделали более эффективным. Проще говоря данный режим позволяет отключить активную передачу данных и автоматические обновление приложений в фоне, что позволяет сохранить энергию и одновременно снизить функционал вашего смартфона/планшета.
Данная программа работает немного на ином алгоритме, связанный с виртуальными частными сетями, которые не ограничивают использование мобильного интернета и передачу данных на устройстве. При этом активация режима происходит только в момент блокировки дисплея устройства и добавлении тех или иных программ в список исключения.
Активация программы происходит простым нажатием на одну кнопку, после чего вы увидите, как она заработает, а если вам будет нужно включить приложения список исключения, то просто нажмите на иконку, расположенную в левом верхнем углу, после чего нажмите на знак плюсика рядом с теми программами и играми, которые вам необходимы. Интерфейс приложения выполнено в простом, но достаточно стильном оформлении, все очень красиво и не вызывает вопросов, к тому же программа полностью на русском языке.
Doze – энергосбережение на андроид — качественная программа, которая позволит вам сохранить работу устройства в течение пары дополнительных часов путем отключения мобильного интернета в момент блокировки экрана устройства.Скачать приложение Doze – энергосбережение на Андроид вы можете по ссылке ниже.
Разработчик: YirgaLab Платформа: Android 4.0 и вышеЯзык интерфейса: Русский (RUS)Состояние: Free (Бесплатно)Root: Не нужен
Doze — энергосбережение — v.1.11 | [Размер файла — 2,87 Mb] |
[google play] |
Режим энергосбережения 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. Одно показывало, какие приложения не дают процессору уснуть, другое позволяло «заморозить» эти приложения, чтобы они вообще не могли работать в фоне. Для многих любителей ставить на смартфоны сотни приложений эти два инструмента стали спасением.
Однако, кроме root на смартфоне, Wakelock Detector и Greenify требовали также понимать, что ты делаешь, тратить время на поиск жадных до процессора приложений, да и вообще все это грязные хаки. С помощью Doze Google как раз и попыталась избавиться от этих проблем, реализовав полностью автоматический механизм заморозки приложений.
Как это работает?
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 в Android 6.0 также появилась родственная ему функция App Standby. По сути, это все тот же механизм, но работающий в отношении отдельно взятых приложений, а не всей системы в целом и не зависящий от того, выключен экран или нет. Работает он так: система непрерывно следит за тем, какие ранее запущенные приложения ты используешь, и, если ты долго не возвращался к какому-то из них, переводит его в режим Standby. В таком режиме приложение имеет все те же ограничения, что и в режиме Doze, и точно так же время от времени получает управление на короткие периоды.
Можно ли отключить Doze?
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»
- https://m.habr.com/post/269491/
- https://m.apkpure.com/ru/doze-for-better-battery-life/com.yirgalab.dzzz
- https://trashbox.ru/link/doze-android
- https://4pda.biz/programs/sistemnye/utility/2376-doze-energosberezhenie.html
- https://xakep.ru/2016/02/02/doze/