Экономия батареи: как предотвратить нежелательный выход Андроида из спящего режима

Спящий режим Андроид – что это такое и как отключить – вопрос, требующий срочного решения в ситуации, когда пользователю нужна постоянная работа устройства. Если нужно отключить режим сна или увеличить время затухания, стоит изучить рекомендации данной статьи. Здесь сказано, каким способом провести увеличение временного периода, почему это нужно и какие преимущества можно приобрести от проведения данной операции.

Для чего нужна эта функция?

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

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


Сценарий 2. Небольшая задержка в ответе некритична, в режиме Doze сервис должен работать

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

Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS

Пример:

@TargetApi(23) public static void requestIgnoreBatteryOptimisation(Context context) { Intent intent = new Intent(); String packageName = context.getPackageName(); PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); if (!pm.isIgnoringBatteryOptimizations(packageName)) { intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); intent.setData(Uri.parse(«package:» + packageName)); context.startActivity(intent); } }

Плюс добавить такую строку в Manifest.xml:

Если юзер согласится добавить приложение в исключение, нажав «Да», наша служба сможет работать с Сетью и устанавливать вейклоки (partial wakelock), даже когда смартфон находится в режиме Doze.

Проблема этого подхода только в том, что Google не пропустит такое приложение в Play Store. Точнее, она должна его пропустить, если подобная функциональность действительно необходима приложению (об этом ясно сказано в документации). Но по факту робот Гугла сразу отшибает любые приложения с пермишеном REQUEST_IGNORE_BATTERY_OPTIMIZATIONS.

Обойти эту проблему можно, если вместо того, чтобы напрямую просить юзера добавить приложение в список исключений, просто кинуть его на экран управления исключениями Doze (Настройка → Батарея → Меню → Экономия заряда батареи), предварительно предупредив, что юзер должен сам найти приложение в списке и выключить для него режим энергосбережения. Сделать это можно с помощью такого метода:

@TargetApi(23) public static void openBatteryOptimizationSettings(Context context) { Intent intent = new Intent(); String packageName = context.getPackageName(); PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); if (!pm.isIgnoringBatteryOptimizations(packageName)) { intent.setAction(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS); context.startActivity(intent); } }

Режимы энергосбережения Android

В Android 4.4–5.1 (версии ниже мы рассматривать не будем — они стремительно устаревают) служба будет работать и моментально откликаться на запросы сервера, но только до тех пор, пока экран включен. Через несколько секунд после отключения экрана смартфон перейдет в режим сна (suspend), и промежуток между отправкой запроса и ответом нашего приложения будет составлять примерно минуту. Это срок между maintenance-пробуждениями устройства, и повлиять на него мы не можем.

В Android 6.0–7.1 ситуация будет примерно такой же, однако спустя примерно час смартфон перейдет в так называемый режим Doze. После этого ответ от приложения можно либо не получить вовсе, либо получить спустя час или два. А все потому, что в режиме Doze смартфон фактически не дает работать сторонним приложениям и их службам и полностью отрезает им доступ в Сеть. Управление они могут получить только на короткий промежуток времени спустя час после перехода в режим Doze, затем два часа, четыре часа, со все большим увеличением промежутков между пробуждениями.

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

Плохие же новости в том, что, помимо Doze, в Android 6.0–7.1 есть и другой механизм энергосбережения под названием App Standby. Работает он примерно так: система следит за тем, какие приложения использует юзер, и применяет к редко используемым приложениям те же ограничения, что и в случае с режимом Doze. При подключении к заряднику все переведенные в режим Standby приложения получают амнистию. К приложениям, имеющим уведомление или права администратора (не root), режим Standby не применяется.

Итого, в Android есть сразу три механизма, с которыми придется бороться:

  • Suspend — обычный режим энергосбережения, может замедлить получение ответа от устройства примерно на одну минуту;
  • App Standby — агрессивный режим энергосбережения, способный замедлить получение ответа на сутки;
  • Doze — агрессивный общесистемный режим энергосбережения, который применяется ко всем приложениям.

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

Почему нельзя поменять спящий режим на телефоне?

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

Если дисплей телефона не был заблокирован владельцем вручную, гаджет уйдет в «сон» через 30 секунд полного бездействия. Чтобы сделать данный временной промежуток времени более долговременным, придется действовать через настройки. Если же нужно деактивировать опцию, следует зайти в специальное меню или задействовать функционал приложений.

Оптимизация работы аккумуляторной батареи

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

Тайм-аут операции — что это такое?

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

В принципе, тайм-аут и можно трактовать как некий временной промежуток, в течение которого система ожидает ответа сервера на собственный отправленный запрос. В системах Windows это параметр установлен по умолчанию, а его значение прописано в сетке системного реестра настроек текущего компьютерного терминала в подразделе SYSTEM, где во вложенных директориях находится подпапка Parameters, где время указано в секундах. Как правило, изменять его не рекомендуется.

Msconfig: вкладка Службы

Здесь всё просто. В списке представлены службы, которые запускаются с загрузкой и работают прямо сейчас. Полезным здесь часто является опция Не отображать службы Microsoft, если нас интересуют загружаемые вместе с Windows программы со стороны. Выставлением или снятием галочки можно проверять влияние той или иной программы на запуск, если вы собираетесь выцепить виновника нестабильной работы.

Применяемые здесь настройки сочленяются с настройками во вкладке Общие

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

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

список автоматически загружаемых программ теперь здесь

а вот автозагрузку в windows 7 можно было

Однако, чтобы получить наиболее полное представление об управлении автозагрузкой, лучше уделить внимание статье

Тоже будет интересно