Как не дать android заснуть в избранных приложениях
Как уже всем известно, смартфоны на базе OS Android отличаются своей нелюбовью к батареям. Или наоборот, повышенной любовью, которая заставляет иной раз задуматься, куда могло уйти столько заряда батареи, если смартфон просто лежал на столе. Было бы понятно, и даже в какой-то мере простительно, если б речь шла о пожирании заряда батареи при выполнении пользователем каких-то "тяжелых", энергоемких задач на смартфоне. Но совсем никуда не годится, когда одиноко лежащий гаджет втайне от вас занимается убиванием батареи, и когда он нужен для работы - предупреждает вас о необходимости подключить зарядное устройство. Столь повышенное внимание к батарее в режиме ожидания со стороны смартфона, как правило, вызвано софтом или системными процессами, не дающими процессору успокоиться и впасть "в спячку".
Чтобы не ломать голову над тем, какая из сотен установленных программ вдруг начала проявлять нездоровый интерес к вашей батарее, заставляя вхолостую работать гаджет, когда вы наивно полагаете, что смартфон спит, - стоит воспользоваться специальной программой для контроля за установленным софтом и процессами. А чтобы сделать это можно было достаточно просто, даже не разбираясь в непонятных графиках, терминах и прочей специфической ерундистике, имеющей мало отношения к рядовому пользователю, - стоит воспользоваться программой, проще которой для таких целей вряд ли получится найти.
Внешний вид и функционал
Наш детектор сна для смартфона - скромняга. Выглядит он достаточно просто, был интуитивно понятен даже в то время, когда язык программы был сугубо английский.
При запуске программы мы попадаем на главную вкладку, представляющую из себя список программ, часто или не очень будящих ваш смартфон. На верхней панели слева иконка программы в виде батареи с головой знаменитого андроида, чуть правее - иконки для выбора предпочтений. Первая же иконка (она меняется в зависимости от выбранной сортировки программ и процессов) открывает нам меню, в котором можно выбрать критерии сортировки списка программ ниже.
Как видно из скриншота, всего мы можем определить программы или процессы, которые чаще других заставляют просыпаться процессор, экран смартфона, или программы, которые не дают переходить смартфону в режим так называемого глубокого сна. В двух словах об этом режиме специально для тех, кто еще не в курсе. Именно способность смартфона на базе Android в режиме ожидания снижать частоту процессора, не реагировать на фоновые приложения, не требующие вашего внимания (как, например, различные мессенджеры), и есть по сути глубокий сон.
Но что делать, не всегда так везет, и приходится искать "виновника торжества", смешно названного в нашем детекторе "программой разбудилкой". Как вы уже поняли, перевод в программе скорее всего машинный, местами способен вызвать улыбку, но отчего-то совсем не раздражающий. Возможно, потому, что на текст особо внимания не обращаешь, а сразу начинаешь выискивать в построенном списке проблемный софт и процессы.
Но я несколько отвлекся, идем изучать программу дальше.
Вторая иконка в правой части верхней панели позволяет сортировать список приложений и процессов по алфавиту, по количеству раз, которые программа или процесс были запущены, или их использованию. Честно признаться, так и не понял, чем существенно отличаются два последних способа сортировки.
Наконец, последняя иконка, крайняя справа на верхней панели, дает нам доступ к настройкам, кнопке выхода из программы, а также возможности обновить построенный список ваших программ-пожирателей батареи или поделиться ссылкой на программу. О настройках скажу чуть ниже, остальное, думаю, понятно без дополнительных пояснений. Как уже писал, программа проста до безобразия, чем и радует в отличие от некоторых ее аналогов, в которых с ходу не разберешься.
Упреждая вопрос - зачем нужна эта программа, поясняю, что после выявления программы или процесса, не дающих смартфону переходить в глубокий сон, пользователь должен будет сам решить, что с этим делать. Вариантов не много, или удаление программы и установка ее аналога, или попытка различных чисток и оптимизаций системы или переустановка программы. Словом, никогда нельзя сказать, что именно поможет в каждом конкретном случае, пробовать сначала стоит с менее радикальных мер, но если все равно видно, что спать смартфону программа мешает, - смело удаляйте ее.
Настройки и прочие мелочи в программе
Собственно настроек, как таковых, у программы не очень много. Да что там, их почти нет. Поначалу и вовсе думал не выделять этот пункт отдельно, но потом решил, что так будет удобнее, так как кроме настроек есть еще несколько интересных моментов.
Самая первая настройка из доступных - это возможность включить отображение системных процессов, использующих в спящем режиме батарею вашего смартфона. Казалось бы, зачем оно надо? А вот и надо. Иногда, редко, но бывает, у пользователя спустя время начинаются проблемы с батареей, которая буквально тает на глазах. Причем, по его заверениям, никаких сторонних программ он не ставил или удалил все, что поставил из непроверенного софта. А батарея все равно сильно расходуется. Вот тут и пригодится эта настройка в программе. Так уж получается, что при всех своих плюсах OS Android сильно не хватает стабильности. И одним из проявлений этого является внезапный сбой какого-либо системного процесса в прошивке. Результаты могут быть самые разные, от "подлагиваний" интерфейса и тормозов при выполнении задач до уже упомянутого повышенного расхода батареи. Самостоятельно это не определить, почему и функция в программе очень полезная. А так как процесс системный и удалять для решения проблемы нечего, остается перепрошивка или сброс системы до первоначальных настроек. Процедуры не сложные, но кто же станет их делать наугад просто от подозрений. А так включили отображение в нашем детекторе системных процессов, увидели, что какой-то из них стал вдруг просто убивать батарею, и приняли решение.
Следующая настройка касается статистики времени работы смартфона после выключения зарядки. Как видно из скриншота выше, включить ее в переведенной версии программы нельзя, так как никаких чекбоксов напротив нет. Благо опыт перевода программ выручает, и подозревая, что из-за длины слов автору просто не хватило места в вертикальном режиме для этого чекбокса, переворачиваем смартфон в ландшафт.
И настройка тут же появляется, благо эта длинная фраза в экран поместилась (хотя, вопрос еще, поместится ли она даже в ландшафте на устройстве с меньшим чем у меня экраном). Вкупе с откровенно низким качеством перевода, который еще можно простить, это играет против программы. Оставь автор английский вариант или попроси кого-то оформить грамотный перевод - было бы гораздо лучше.
Последняя доступная пользователю настройка относится сугубо к внешнему виду программы и ничего полезного не несет. Если только для пользователей амоледовских дисплеев, которым противопоказано много белых тонов на экране.
С помощью кнопки "Менять тему" вы сможете изменить тему программы на темную или светлую, по своему вкусу.
Что еще можно найти в пункте Настройки? Да, собственно говоря, ничего больше особо интересного.
Если есть нужда в виджете для программы, вы сможете купить его из этого раздела. К нему же можно прикупить какую-то Базу решений. Не знаю, что за база такая, могу лишь предполагать, что сборник советов по энергосбережению или что-то в этом духе. Стоит ли на нее тратить свои деньги - решать вам, но я бы подумал сто раз, уж чем-чем, а бесплатными советами и решениями этого вопроса интернет и так просто пестрит. Зато понравился пункт FAQ с пояснениями о работе программы.
Пусть перевод, как и в целом по программе, просто никакой, но относительно все понятно и может очень пригодиться новичку, впервые взявшему смартфон на Android в руки. Хотя бы в качестве ознакомительного материала, чтобы было понятнее, в какую сторону копать в случае проблем с повышенным расходом батареи, а не бежать сразу же сдавать смартфон в магазин как неправильно работающий.
Еще здесь же можно оценить программу, узнать ее версию и написать разработчику. И все. В принципе, основное свое предназначение программа выполняет на отлично, так что ничего больше вам и не потребуется. Скорее даже, на мой взгляд, присутствует лишнее в виде возможности изменения темы или покупки виджета с базой.
Про конкурентов писать здесь ничего не буду. Просто потому, что не вижу смысла. Программа отлично справляется со своим назначением, бесплатна, не нагружает оперативную память и сама практически не потребляет батарею. Искать от добра добра вряд ли стоит, но если все же неймется, то можете попробовать BetterBatteryStats. Правда, она платная и для ее полноценной работы требуется рут-доступ. В целом в Google Play полно программ, аналогичных Wakelock detector, но очень мало из них действительно заслуживают внимания. И проверять все подряд нет смысла, когда имеется простая и вполне себе рабочая программа.
10 баллов. Можно было бы снизить оценку на балл из-за низкопробного перевода (который еще и включение настройки зацепил), но делать этого не стану, так как в данном случае перевод в программе дело десятое, на ее работе никак не сказывается и не мешает, а настройку можно включить и повернув экран в ландшафт. Хотя хочется надеяться, что в следующих версиях перевод будет исправлен, все же не стоит автору забывать и об эстетической стороне вопроса. А учитывая, что программа частенько обновляется, думаю это вопрос не такой и долгий. Так что 10 из 10 по праву, из всех ранее пробованных эта программа наиболее удобна и понятна пользователю, так что смело могу рекомендовать ее к установке даже начинающему пользователю.
Вы наверняка замечали, что смартфоны начинают разряжаться заметно быстрее спустя каких-то пару месяцев после покупки. В наихудшем случае вы можете получить полностью разряженный гаджет на утро или 15-20% заряда аккумулятора к концу рабочего дня при считанных минутах работы дисплея. И дело здесь вовсе не в батарее, а в установленных приложениях, которые препятствуют уходу смартфона в экономичный спящий режим. Выявить пожирателей батарейки и умерить их аппетиты даже без root-доступа вам поможет наша статья.
На сколько вырастет автономность?
Вопрос, который, скорее всего, сразу возник у вас в голове: «а какой, собственно, прирост автономности даст выполнение этой инструкции?». Всё зависит от того, какие именно приложения установлены у вас на гаджете. Если вы только купили смартфон и успели установить на него только пару-тройку программ, то, скорее всего, никакого прироста не будет. Но, если у вас десятки программ, добрая половина из которых выполняет какие-то действия пока гаджет спит, разница может быть вполне заметной. Так, в нашем случае, наиболее активными программами, не дававшими смартфону заснуть, оказались VoIP-приложение от Tele2, клиент Dropbox с автоматической синхронизацией фотографий и Wearable Widgets. После остановки этих программ разница в разряде смартфона за примерно одинаковое время составила примерно 8%.
Что такое wakelock?
Android построена на ядре Linux, благодаря чему предлагает самые широкие возможности как обычным пользователям, так и любителям копаться в системе. В отличие от ОС для компьютеров, которые переводят устройства в энергоэффективный спящий режим после длительного бездействия, Android предназначен для устройств, большую часть времени находящихся в «спячке». Ради увеличения автономной работы Android-устройства при любой возможности должны переходить в экономичный режим. Но когда приложения выполняют важные действия, система не должна уходить в сон. Для этого был придуман механизм wakelock’ов. К сожалению, он и стал основной причиной слабой автономности Android-устройств.
Полный список потенциальных пожирателей батареи и время их активности сохраняются в логах Android. Их можно просмотреть с помощью инструмента Battery Historian
Нажимая кнопку питания работающего смартфона, вы переводите его в режим Suspend, аналог режима ACPI S3 на настольных компьютерах — или, попросту говоря, в спящий режим. При переходе в Suspend полноценным потребителем энергии остаётся только оперативная память, которая хранит весь системный контент, а остальные компоненты работают в дежурном режиме, потребляя минимум энергии. Благодаря этому энергопотребление в Suspend может составлять всего 1% от номинального. Это актуально для планшетов, но в смартфонах приходится держать включенным ещё и радиомодуль — иначе гаджет не сможет принимать звонки.
Именно так всё должно работать в идеальном мире. Но где он, тот идеальный? В реальном же на сцену выходит механизм wakelock, из-за которого наши гаджеты почти никогда не «спят» полноценно. С английского имя этого деятеля переводится как «прерывание сна». Данное событие может быть вызвано либо ядром системы (Kernel Wakelock, KWL), либо пользовательским приложением (Partial Wakelock, PWL). Последние часто также называют «частичными wakelock». Причины могут быть самыми разными. Среди KWL вы наверняка увидите «будильники», связанные с Wi-Fi и сотовой сетью, а среди PWL — события фоновой синхронизации различных программ.
Battery Historian показывает причины и длительность wakelock’ов. Так, на скриншоте видно, что сервисы Facebook стали причиной пробуждения смартфона почти на три минуты
Когда отключение может навредить
Справедливости ради отметим, что за многие годы работы над механизмом wakelock Google удалось научить Android бережно относиться к батарее, поэтому основной целью для нас будут частичные wakelock, вызываемые сторонним ПО. Именно они злостно пожирают заряд аккумулятора, особенно при большом количестве установленных программ.
Важно понимать, что именно частичные «будильники» (PWL) часто становятся причиной wakelock’ов ядра. Поэтому бездумное отключение вызовов вэйклоков ядра вместо борьбы с источниками частичных не только не улучшит автономность смартфона, но и может стать причиной быстрого разряда аккумулятора. Наглядный пример: отключение Wi-Fi при большом количестве wakelock’ов под названием wlan_rx_wake заставит приложения, запрашивающие передачу данных, делать это через сотовую сеть. Даже при отсутствии соединения с ней это вызовет более частые просыпания гаджета — и, как следствие, большее энергопотребление.
Инструкция по отключению
Главный инструмент в борьбе с программами-источниками wakelock’ов — приложение BetterBatteryStats, которое хоть и платное, но стоит каждой потраченной на него копейки. Дополнительную информацию и тонкости работы с приложением можно узнать на нашем форуме.
Для того, чтобы программа могла работать без root-прав, нам потребуется дать ей некоторые системные разрешения вручную. Для этого на ПК придётся установить adb (Android Debug Bridge) — утилиту для взаимодействия с Android-устройствами. Её можно загрузить в составе пакета Platform Tools с официального сайта Android.
Шаг 1. Подготовка adb. Разархивируйте Platform Tools в любую папку на компьютере и перейдите в неё в Проводнике. После этого откройте командную строку Windows. Для этого кликните правой кнопкой мыши по пустому месту в окне Проводника с зажатой клавишей Shift и выберите пункт «Открыть окно команд». Для запуска консольной программы из командной строки Windows достаточно ввести её название (в нашем случае — adb). Если вы используете командную оболочку PowerShell, для запуска приложения потребуется указать к нему относительный путь, например, .\adb.
Шаг 2. Подключение смартфона к ПК через adb. Для управления смартфоном с компьютера необходимо разрешить работу adb на самом гаджете. В настройках аппарата найдите пункт «Об устройстве», внутри которого семь раз коснитесь пункта «Номер сборки».
На главном экране настроек появится новый раздел «Для разработчиков», в котором нужно найти и активировать пункт «Отладка по USB».
Для проверки работы adb в консоли введите команду
Если всё сделано правильно, в появившемся списке вы увидите своё устройство.
Сразу после ввода команды на смартфоне появится всплывающее окно, в котором необходимо поставить галочку «Всегда разрешать отладку с этого компьютера», а затем нажать кнопку ОК.
Шаг 3. Предоставление системных разрешений. Теперь самое время дать приложению BetterBatteryStats системное разрешение для доступа к данным батареи. Это делается всего одной командой, которую необходимо ввести в консоль:
adb -d shell pm grant com.asksven.betterbatterystats android.permission.BATTERY_STATS
В случае, если вы установили BetterBatteryStats с форума XDA Developers, команда будет слегка изменённая:
adb -d shell pm grant com.asksven.betterbatterystats_xdaedition android.permission.BATTERY_STATS
Если всё прошло правильно, вы не увидите вывода команды в консоли (курсор просто переместится к следующей строке), а в самой BetterBatteryStats пропадёт надпись «Нет доступа к вэйклокам ядра» при выборе категории Kernel Wakelock.
Шаг 4. Анализ wakelock’ов. После установки BetterBatteryStats и предоставления ей разрешений программе может понадобиться некоторое время для сбора статистики. Для этого просто пользуйтесь смартфоном в штатном режиме несколько часов. Когда будет собрана достаточная статистика, запустите приложение и выберите режим отображения Partial Wakelock. Из скриншота видно, что смартфон работал автономно чуть больше часа, и 25 минут из этого часа аппарату не давал заснуть клиент Dropbox. Нетрудно догадаться, что спустя сутки именно эта программа станет основной причиной разряда аккумулятора, когда смартфон находится в спящем режиме.
Шаг 5. Отключение wakelock’ов через adb. В большинстве приложений проблему с активной генерацией «будильников» можно решить, не залезая вглубь системы. Для этого нужно прикинуть, какая из настроек программы может вызывать нежелательное поведение. В случае с Dropbox это автоматическая синхронизация фотографий с облаком.
Более радикальный способ — удаление программы, которая вэйклоки вызывает. Именно так проще всего избавиться от разряда батареи клиентом Facebook и его мессенджером.
Если же изменение настроек программы результатов не принесло, но и отказываться от приложения вы не готовы, можете попробовать отключить wakelock’и от него вручную. Для этого сперва понадобится узнать название пакета. Чтобы сделать это, достаточно нажать на иконку программы в списке BetterBatteryStats. Так, из скриншота ниже видно, что полное название пакета Dropbox — com.dropbox.android.
Теперь, чтобы запретить программе генерировать wakelock’и, достаточно ввести в консоль adb следующую команду, подставив нужное название пакета:
adb -d shell cmd appops set название_пакета WAKE_LOCK ignore
В нашем случае команда будет выглядеть так:
adb -d shell cmd appops set com.dropbox.android WAKE_LOCK ignore
Важно отметить, что попытки программ вызвать wakelock’и по-прежнему будут отображаться в BetterBatteryStats, но фактического влияния на устройство они больше оказывать не будут.
Шаг 5. Альтернативный способ: отключение wakelock’ов через GUI. Если вы хотите за один раз навести порядок в своём смартфоне, не обязательно вводить команды adb: всё можно сделать и с помощью бесплатных мобильных приложений App Ops и Shizuku Manager. Первым делом запустите Shizuku Manager и отправьте на смартфон следующую команду:
adb shell sh /sdcard/Android/data/moe.shizuku.privileged.api/files/start.sh
В зависимости от модели смартфона она может выглядеть по-разному, поэтому лучше свериться с текстом, который Shizuku Manager показывает в главном окне. Если всё сделано правильно, на вашем смартфоне будет запущен собственный сервер adb, который позволяет выполнять команды с повышенными привилегиями в обход ПК.
Теперь запустите App Ops и согласитесь с настройками по умолчанию. Если adb сервер был запущен, вы увидите список программ, установленных на смартфоне.
После этого вам останется только найти в списке нужную программу и запретить ей отключение спящего режима, а, при желании, ещё и работу в фоновом режиме.
Борьба с другими причинами пробуждения смартфона
Не все wakelock’и стоит отключать сторонними методами. О некоторых стандартных способах борьбы с ними (например, изменением настроек приложений) мы уже упомянули, но хотим вам предложить ещё несколько действенных методов.
1. Не используйте таск-киллеры. Если приложение посчитает, что не завершило свою работу, оно всё равно вызовет вэйклок и запустится снова, потратив ещё больше заряда. Единственное исключение — Greenify, который использует достаточно продвинутые алгоритмы завершения работающих в фоне программ и не снижает время автономной работы смартфона. Но для продвинутых функций этого приложения понадобятся права root.
2. Выключайте услуги местоположения. Помимо множества сторонних программ доступ к местоположению постоянно требуют и сервисы Google. Поэтому, когда вам не нужно определение местоположения напрямую (например, во время навигации), отключайте эту услугу. К счастью, сделать это в современных смартфонах очень просто — достаточно нажать на соответствующую иконку в панели уведомлений.
3. Оптимизируйте работу программ в фоне. Помимо непосредственно приложений, которые вы видите на экране, программы для Android могут запускать различные службы для выполнения фоновых задач. Подробно о том, как службы влияют на автономность смартфона, и как оптимизировать их энергопотребление, вы можете узнать в нашей статье Правда или нет? Фоновые приложения нужно закрывать.
Давай представим, что у нас есть приложение, а у него, в свою очередь, есть служба (service), которая должна постоянно висеть в фоне, обрабатывать команды, полученные от сетевого сервера, и отправлять ответы. Связь с сервером, как это и положено мобильным устройствам, поддерживается с помощью long poll запросов, то есть приложение подключается к удаленному серверу и ждет, пока тот отправит что-либо в ответ, а потом переподключается и ждет снова. Это эффективный и очень экономный в плане заряда батареи способ, который в том числе используется в механизме push-уведомлений самого Android.
В теории все выглядит отлично, архитектура приложения абсолютно правильная, вот только, если начать его тестировать, вскроется несколько очень неприятных моментов.
Режимы энергосбережения Android
В Android 4.4–5.1 (версии ниже мы рассматривать не будем — они стремительно устаревают) служба будет работать и моментально откликаться на запросы сервера, но только до тех пор, пока экран включен. Через несколько секунд после отключения экрана смартфон перейдет в режим сна (suspend), и промежуток между отправкой запроса и ответом нашего приложения будет составлять примерно минуту. Это срок между maintenance-пробуждениями устройства, и повлиять на него мы не можем.
В Android 6.0–7.1 ситуация будет примерно такой же, однако спустя примерно час смартфон перейдет в так называемый режим Doze. После этого ответ от приложения можно либо не получить вовсе, либо получить спустя час или два. А все потому, что в режиме Doze смартфон фактически не дает работать сторонним приложениям и их службам и полностью отрезает им доступ в Сеть. Управление они могут получить только на короткий промежуток времени спустя час после перехода в режим Doze, затем два часа, четыре часа, со все большим увеличением промежутков между пробуждениями.
Итого, в Android есть сразу три механизма, с которыми придется бороться:
- Suspend — обычный режим энергосбережения, может замедлить получение ответа от устройства примерно на одну минуту;
- App Standby — агрессивный режим энергосбережения, способный замедлить получение ответа на сутки;
- Doze — агрессивный общесистемный режим энергосбережения, который применяется ко всем приложениям.
Все эти режимы энергосбережения можно обойти, но чем дальше в лес, тем больше костылей и неудобств пользователю, поэтому мы рассмотрим несколько вариантов обхода механизмов энергосбережения, от самых лайтовых до хардкорных.
Сценарий 1. Небольшая задержка в ответе некритична, переход в Doze некритичен
В этом сценарии у тебя есть приложение, для которого задержка в ответе до одной минуты некритична, а переход смартфона в режим агрессивного энергосбережения совсем не страшен. Все, что тебе нужно, — это чтобы система не отправляла приложение в состояние Standby.
Два самых простых способа добиться этого — либо вывести службу на передний план (foreground service), либо дать приложению права администратора устройства. Начнем с первого варианта.
Foreground service
Foreground service в терминологии Android — это служба, которая имеет уведомление в шторке. Система относится к таким службам гораздо бережнее. Например, при нехватке памяти она будет убита в последнюю очередь, она не будет убита при смахивании приложения в меню управления запущенными приложениями, и да, к ней не будет применен режим Standby.
Создать foreground service очень просто. Достаточно вставить в код службы примерно такие строки:
Этот пример создает уведомление, при тапе на которое будет запущена ExampleActivity, в конце с помощью startForeground() служба переводится в статус foreground.
Права администратора
Другой вариант — это дать приложению права администратора. Такие права обеспечивают возможность управлять политикой формирования паролей экрана блокировки, делать удаленную блокировку и вайп устройства.
В свое время Google ввела понятие «администратор устройства» для компаний, которые хотели бы управлять смартфонами своих сотрудников. То есть компания создает приложение, которое получает права администратора и может заблокировать или сбросить телефон после команды от сервера. Именно поэтому приложение с правами администратора не переходит в режим Standby, ведь команда на блокировку может прийти в любой момент.
Получить, а точнее запросить права администратора опять же просто. Для начала нам понадобится пара колбэков, которые будут вызваны после того, как права получены или отозваны:
А затем достаточно вызвать интент DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN, который приведет к появлению на экране окна для активации прав администратора:
Запрос на активацию прав администратора и окно управления администраторами | Запрос на активацию прав администратора и окно управления администраторами |
Запрос на активацию прав администратора и окно управления администраторами |
Сценарий 2. Небольшая задержка в ответе некритична, в режиме Doze сервис должен работать
Проблема с предыдущим сценарием в том, что, хотя приложение и не будет переходить в состояние Standby, режим Doze продолжит на него действовать. К счастью, Android позволяет частично отключить Doze для выбранных приложений и даже предоставляет средства для вывода диалога с запросом на добавление приложения в список исключений. Все, что нужно сделать, — это вызвать следующий интент:
Плюс добавить такую строку в Manifest.xml:
Если юзер согласится добавить приложение в исключение, нажав «Да», наша служба сможет работать с Сетью и устанавливать вейклоки (partial wakelock), даже когда смартфон находится в режиме Doze.
Проблема этого подхода только в том, что Google не пропустит такое приложение в Play Store. Точнее, она должна его пропустить, если подобная функциональность действительно необходима приложению (об этом ясно сказано в документации). Но по факту робот Гугла сразу отшибает любые приложения с пермишеном REQUEST_IGNORE_BATTERY_OPTIMIZATIONS.
Обойти эту проблему можно, если вместо того, чтобы напрямую просить юзера добавить приложение в список исключений, просто кинуть его на экран управления исключениями Doze (Настройка → Батарея → Меню → Экономия заряда батареи), предварительно предупредив, что юзер должен сам найти приложение в списке и выключить для него режим энергосбережения. Сделать это можно с помощью такого метода:
Окно исключений режима Doze | Окно исключений режима Doze |
Окно исключений режима Doze |
Сценарий 3. Задержка в ответе недопустима, в режиме Doze сервис должен работать
К сожалению, даже если ты добавишь приложение в исключения Doze, ты все равно не избежишь задержки в ответе. Одна минута может быть некритична для большинства приложений, но, если речь идет о чем-то вроде мессенджера, никакая задержка не допустима.
Реализация push-уведомлений выходит далеко за рамки этой статьи, поэтому я не буду рассказывать о ней, но поделюсь некоторыми советами.
- Push-уведомления должны быть реализованы средствами Firebase Cloud Messaging (FCM, ранее Google Cloud Messaging) или с помощью библиотек и сервисов на основе этой технологии.
- Уведомления должны быть высокоприоритетными, иначе они не смогут вытащить твое приложение из Doze.
- Твое приложение должно находиться в списке исключений Doze, иначе, проснувшись после получения push, оно не сможет выйти в Сеть.
- Самый простой способ реализации push-уведомления — это сервис OneSignal. Он построен на базе FCM, очень легко интегрируется в приложение и предоставляет безлимитное количество пушей даже в бесплатной версии.
Вместо выводов
С каждой новой версией Android Google все больше ограничивает разработчиков приложений в возможностях. Однако обходные пути всегда можно отыскать. Да, порой эти пути больше напоминают извилистые лесные тропы, чем автомагистраль. Но они есть, и Google не закрывает все возможные пути реализации функциональности, намеренно оставляя лазейки.
Евгений Зобнин
Редактор рубрики X-Mobile. По совместительству сисадмин. Большой фанат Linux, Plan 9, гаджетов и древних видеоигр.
Смартфоны уже перестали быть обычным средством для телефонных разговоров. Эти устройства мы используем для фотографирования, чтения, поиска информации, заработка, общения в соцсетях, оплаты услуг. Сценариев использования море. Причем появление дополнительных фишек только увеличивает возможную вариативность применения гаджетов.
Есть и проблемы. Главный бич современных устройств - быстрая скорость разрядки батареи. Даже новые смартфоны редко когда выдерживают более 2 суток активного использования. Со временем емкость батареи только снижается. Старые гаджеты приходится заражать по несколько раз на дню.
Разработчики программного обеспечения периодически добавляют разные энергосберегающие функции. Они позволяют добиться высокой экономии заряда. Специалисты рассказали, какие решения можно использовать на работающих под управлением Android гаджетах.
Bettery Saver
Указанную функцию для смартфонов в Google представили еще для пятой версии Android. При включении опции система автоматически снижает объем передаваемых данных, производительность и многие другие функции. В результате чего удается добиться существенной экономии зарядки.
Вариативность способов экономии зарядки зависит от конкретной модели. Например, в некоторых устройствах сразу включается режим автояркости экрана. Некоторые модели включают темный фон, останавливают работу приложений.
Некоторые модели предлагают пользователю поставить режим при достижении определенного уровня заряда. Например, соотвествующее пуш-уведомление может появиться при 30% от емкости. Однако пользователь устройства может включить режим в любой момент. Для этого нужно:
- Зайти в "Настройки".
- Выбрать в соответствующем разделе "Батарея".
- Активировать режим.
При необходимости на рабочий экран можно добавить соответствующий ярлык и активировать функцию еще быстрее. Некоторые владельцы устройств не выключают опцию в принципе.
Функция Doze
Пользователи смартфонов замечают, что уведомления на телефон часто приходят в момент активации экрана. Такой эффект возникает из-за функции Doze. По сути, указанная опция переводит гаджет в режим "сверхглубокого сна" при простаивании. То есть, при неактивном режиме Doze деактивирует любую синхронизацию и отключает доступ к сети.
Во многих смартфонах функция активируется по умолчанию. При необходимости пользователи могут добавить в Doze разные приложения. Сделать этом можно в настройках батареи или конкретного приложения.
Функция App Standby
Эта опция переводит редко используемые приложения в неактивную фазу. Работа в фоновом режиме даже неиспользуемых программ часто провоцирует увеличенную скорость разряда батареи. Для вывода конкретной программы из этого режима пользователю просто необходимо зайти в приложение. Смартфон автоматически отменит указанную функцию.
При необходимости эту опцию можно снять. Сделать это можно в настройках конкретной программы или батареи. Однако при ошибках пользователи могут серьезно ухудшить качество работы гаджета.
Можно также проверить активные приложения. Если программа работает в фоновом режиме, но вы ею практически не пользуетесь, то ее можно деактивировать.
Adaptive Bettery
Указанная опция появилась на "Андроид"-устройствах в 2018 году. Основной появления функции стало машинное обучение. Гаджет изучает, какие приложения и когда использует пользователь. В результате чего он активирует их к нужному человеку времени.
Нетривиальные решения
Вместо итогов
Производители рассматривают разные схемы увеличения емкости батареи. Однако про ПО забывать тоже не следует.
Читайте также: