Как отключить ограниченное использование батареи для whatsapp
Перейти к содержимому

Как отключить ограниченное использование батареи для whatsapp

  • автор:

WhatsApp для Android разряжает батарею. Что делать

Высокий расход энергии – проблема, которая характерна для новых версий iOS и практически не встречается на Android. Не то чтобы «зелёный робот» был совсем беспроблемной платформой, просто, если что-то подобное и происходит, то виной всему зачастую оказывается не системный сбой, а сторонний софт. За примерами далеко ходить не надо, ведь после того как на этой неделе WhatsApp для Android получил свежее обновление, он вдруг неожиданно начал потреблять в разы больше энергии, чем потреблял до этого, став головной болью для многих пользователей.

WhatsApp для Android разряжает батарею. Что делать. Аккумулятор разряжается слишком быстро? Проверьте, возможно, дело в WhatsApp. Фото.

Аккумулятор разряжается слишком быстро? Проверьте, возможно, дело в WhatsApp

Читайте также: В WhatsApp для Android появилась защита отпечатком. Как включить

Судя по количеству отзывов, которые пользователи WhatsApp оставляют на разных площадках, проблема перерасхода энергии является довольно распространённой. Во всяком случае, изрядная часть отзывов, оставленная в Google Play за последние несколько дней, состоит из жалоб на преждевременную разрядку смартфонов именно из-за мессенджера. Ведь если раньше он расходовал не больше 10-15% заряда в сутки, то теперь съедает от 30 до 40%, указывая на серьёзность случившегося сбоя.

Какие смартфоны разряжаются из-за WhatsApp

Чаще всего с проблемой сталкиваются пользователи смартфонов OnePlus, Samsung, Xiaomi и, как ни странно, Google Pixel, притом что последних по логике должно быть в разы меньше, чем всех остальных. Тем не менее, владельцы аппаратов других марок либо жалуются кратно реже, либо не жалуются вообще. К примеру, нам не удалось найти ни одной жалобы от владельцев Huawei, Honor и Vivo, не говоря уже о Sony, LG и Motorola. Всё это позволяет сделать вывод о том, что причиной преждевременной разрядки может быть баг в прошивках затронутых смартфонов, который почему-то приводится в действие мессенджером WhatsApp.

Попробовать изменить ситуацию можно несколькими способами. Первый предполагает полное удаление мессенджера с затронутого смартфона с последующей переустановкой. Чтобы не потерять все свои чаты, настоятельно рекомендуется сделать резервную копию. Для этого перейдите в контекстное меню – «Настройки» — «Чаты» — «Резервная копия чатов» и нажмите на зелёную кнопку «Резервное копирование». После того, как копия сохранится, удаляйте приложение, а потом – во время установки – не забудьте восстановить чаты из облака.

Как исправить преждевременную разрядку из-за WhatsApp

Как оказалось, многим этот метод помогает, однако всё равно срабатывает не у всех. Поэтому мы предлагаем вам альтернативный способ, который состоит в использовании бета-версии WhatsApp. В ней баг, который приводит к преждевременной разрядке смартфонов, уже исправлен, а значит, проблем с автономностью в ней точно не будет. Для того, чтобы скачать тестовую сборку мессенджера, перейдите по этой ссылке, пройдите регистрацию и скачайте бета-версию WhatsApp – она должна заменить уже имеющееся приложение автоматически.

Правда, помните, что тестовые версии приложений могут страдать от перебоев в работе, поскольку не отличаются стабильностью релизных сборок, и WhatsApp в данном случае не исключение. Поэтому настоятельно рекомендуем вам при использовании бета-версии WhatsApp регулярно сохранять резервные копии своих чатов, чтобы, если в мессенджере произойдёт какой-то сбой, не лишиться важной информации. А при необходимости покинуть программу бета-тестирования, снова перейдите по ссылке, данной в предыдущем абзаце, подтвердите выход, после чего установите стабильную версию из Google Play заново.

Оставить комментарий в Telegram. Поделитесь мнением в чате читателей Androidinsider.ru

Теги

  • Аккумулятор
  • Операционная система Android

Как в Android запрещали фоновую работу и улучшали расход батареи

Когда-то работа в фоне была простой. Теперь в Android есть множество ограничений: работа в фоне, доступ к файловой системе, разрешения, на которые надо получить одобрение модераторов Google Play, и другие. Со всеми ими разработчикам приходится работать. Недавно я выступил с докладом на эту тему на конференции DUMP, а теперь написал текст на его основе для Хабра. Давайте вспомним, с чего все начиналось и как менялись требования с каждой новой версией Android.

Если вам интересно следить за самыми последними новостями Android разработки и получать подборку интересных статей по этой тематике, тогда вам стоит подписаться на Телеграм-канал Android Broadcast и мой YouTube канал «Android Broadcast»

Что было вначале

До Android 5.0 у нас был следующий набор инструментов, чтобы выполнять задачи в фоне:

  • Alarm Manager. Инструмент, который позволяет поставить будильник в системе и получать уведомления.
  • Broadcast Intent. Уведомления о событиях, которые происходят в системе. Например, о новых сообщениях.
  • Service — Background, Foreground, Bound.
  • Sync Adapter. Специальная древняя штука, которая связана с менеджментом аккаунтов для синхронизации данных. Яркий пример: при настройке Google-аккаунта в Android можно настроить синхронизацию календаря, контактов и других сервисов. Под капотом она работает через Sync Adapter. До наших дней инструмент не дожил.
  • Download Manager. Утилита, которая позволяет загружать файлы. Она не очень умная, но простая и удобная. Google Play, например, именно ею файлы и загружает.

Проблемы появились, потому что разработчики не соблюдали правило Человека-паука: «С большими возможностями для разработчиков приходит ответственность за скорость работы системы». Google с первых же версий Android дал им огромные возможности, но не предупредил, что они работают в системе, которая несет ответственность за качество.

Когда у пользователей что-то ломалось, они винили не сторонних разработчиков, а говорили: «Android тормозит, вот на IPhone все быстро». Получалось, что разработчики хорошие, а Google плохой.

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

  • Дилемма «размер батареи против габаритов устройства». Все хотят тонкие устройства, которые мало весят и приятно ложатся в руку. При этом всем нужна большая и мощная батарея. С этим врагом бороться трудно.
  • Экран. Все хотят высокую яркость и цветопередачу, но экран — основное место, куда тратится энергия смартфона.
  • Оптимизация прошивки под железо устройства. То, чем занимаются вендоры.
  • Сторонние разработчики. То есть мы с вами.
  • Вопрос, как продать крутой смартфон. У крутого смартфона мощное железо, а оно ест много энергии. Продать крутой смартфон с бюджетным процессором невозможно. Нужно поставить такой, что греется, как печка, и сумасшедше тратит энергию, но зато все делает быстро.
  • Маркетинг, который старается обмануть наши ожидания. Выпуская новое поколение смартфонов, производители говорят: мы перешли на четыре нанометра, на три, на два, поэтому у нас повысилась энергоемкость. Она повысилась, но все, что сэкономили на расходе электроэнергии, мы отдали новым транзисторам. И в итоге только увеличили энергопотребление.

Android 5.0

Google все это надоело, и там решили, что на сторонних разработчиков полагаться нельзя, ведь это самые большие пираты в экосистеме Android. И тогда появился Project Volta.

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

JobScheduler API. Новый системный сервис, единая точка входа для выполнения большинства фоновых операций. Также новый сервис позволил задавать комфортные условия для выполнения операций. Например, операция совершается, когда устройство подключено к зарядке, не используется владельцем или есть доступ к сети с заданными требованиями.

Самое интересное: JobScheduler не использовался в Android 5.0, потому что был жутко забагованный. Заработал он только в Android 6.0.

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

  • Уменьшение частоты процессора.
  • Уменьшение частоты обновления дисплея.
  • Ограничение потребления данных в фоне.
  • Другие оптимизации от вендора. А если вендор может добавить что угодно, фича практически уничтожена.

Android 6.0

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

Как система понимает, что нужно включить Doze Mode? Сначала было так: если пользователь кладет телефон и не использует его, можно отключить сетевой доступ и другие ненужные функции. Например, режим включался, пока владелец смартфона спит. Google заявляла, что Nexus 5 в состоянии Doze Mode поедал всего 1% зарядки за ночь. Правда, я такого никогда не видел.

Все это дало свои плоды. Кроме того, что Doze Mode отключает максимум функций, появляется такая штука, как maintenance window. Это время, когда устройство выходит из Doze Mode и позволяет разработчику что-то сделать или проверить. И тут снова важную роль начинает играть JobScheduler, потому что все контролируется через него.

Примерная схема «включения» maintenance windows

App Standby. Появился второй режим экономии электроэнергии — приостановка активности приложений, которые человек не использует. Если мы сворачиваем приложение и не пользуемся им, на него накладываются ограничения. Они не такие жесткие, как в Doze Mode, но мешают ходить в сеть и снижают частоту срабатываний. В чем конкретно заключаются ограничения, Google, как всегда, не уточняет, потому что вендор может сделать что угодно.

FCM High Priority — тип пушей, способных разбудить устройство в Doze Mode и App Standby. И это важная шутка, но нужно помнить, что, если сделать все пуши высокоприоритетными, они не обязательно дойдут. Часть из них рано или поздно начнет игнорироваться. Поэтому использовать их нужно только на действительно важные события. Например, когда пользователю приходит сообщение в чате, в котором он включил уведомления.

Android 7.0

Doze on the Go, вторая версия Doze Mode. Если раньше устройство приходило в Doze Mode, только когда было неподвижным какое-то время, то теперь достаточно выключить экран и положить смартфон в карман.

В Android 7.0 мы получили немного другую картину с maintenance window. Окна стали появляться чаще, ограничения стали мягче. Но приложения по-прежнему не могли нормально работать в фоне.

Project Svelte. Второй проект по сокращению расхода оперативной памяти и оптимизации способов работы приложений в фоне.

No Broadcasts. Первое, что сделали в рамках проекта, — убрали все бродкасты. Начали с CONNECTIVITY_ACTION. Он стал первым и самым важным, потому что этот бродкаст рассылается на любое изменение сети. Например, когда пользователь переходит с мобильной сети на Wi-Fi. А в Android есть особенность: даже если приложение сейчас убито, но бродкаст-ресивер подписан на какой-то бродкаст, система поднимет приложение, чтобы доставить его.

Представьте, что такое приложение у нас одно. Поднять процесс — недешевая операция, но в целом не страшная. А если таких приложений 20? Каждая смена будет приводить к тому, что процессы будут подниматься и убиваться 20 раз. Хотя и это не так страшно. Страшно, что CONNECTIVITY_ACTION вызывается не только при уходе с сети на Wi-Fi, но и, например, с 3G на 4G. А ведь тип соединения скачет постоянно при прогулках по городу — представьте, сколько событий рассылается системе. Поэтому его отключили первым.

ACTION_NEW_PICTURE. Затем отключили рассылку новых картинок и видео. Не критичная штука, потому что это можно делать и другим путем, например через JobScheduler. Появилась возможность реакции на изменения в контент-провайдер. Можно передать какой-то Uri с ContentProvider и, когда произойдет оповещение об изменении, вызвать джобу.

Android 8.0

NoBroadcasts+, запрет на все системные бродкасты. Либо разработчику это не нужно, либо он может подписаться на них, когда приложение работает. Делать это неявно нельзя, только через JobScheduler. Остались исключения, но их очень мало:

  • ACTION_BOOT_COMPLETED;
  • ACTION_LOCAL_CHANGED;
  • ACTION_PACKAGE_DATA_CLEARED и ACTION_PACKAGE_ FULLY_REMOVED;
  • ACTION_NEW_OUTGOING_CALL;
  • ACTION_MEDIA_***;
  • SMS_RECEIVED_ACTION и WAP_PUSH_RECEIVED_ACTION.

Этот список актуален на лето 2022 года.

Нет фоновым Service. Запретили запускать Service в фоне. Если разработчик запустил такой Service и свернул приложение, он проживет совсем недолго и будет принудительно убит. Если попытаться запустить обычный Service, когда приложения в фоне, тоже будет крэш.

Обновление JobScheduler. Первое — не мало свободной памяти (именно так звучит условие). Сколько памяти достаточно, в Google не говорят. Не низкий заряд батареи — что именно под этим подразумевается, опять же не поясняют. Видимо, это про критичные проценты, когда батарея становится красной.

Нетарифицируемая сеть. Новая классная штука, привязанная к стоимости. Когда мы подключаемся к сети в настройках, мобильная сеть по умолчанию идет как тарифицируемая, то есть мы платим за трафик. Wi-Fi по умолчанию считается нетарифицируемым, но в настройках можно это изменить.

Foreground Service. Бэкграунд-сервисы теперь нужно явно вызывать. Раньше нужно было просто вызвать такой сервис, а потом сказать, что он Foreground. Теперь из-за того, что бэкграунд-сервисы убиты, нужно явно сказать: я сейчас буду запускать Foreground Service. И код становится примерно таким.

context.startForegroundService(Intent(context, MediaService::class)) class MediaService : Service() < override fun onCreate() < super.onCreate() startForeground(NOTIFICATION_ID, newOngoingNotification()) >fun newOngoingNotification() : Notification companion object < const val NOTIFICATION_ID >>

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

Важно помнить, что в любом приложении, когда запускается сервис, активити или что-то еще, первым начинает грузиться апликейшн. Как много разных нитов вы делаете в апликейшене? Обычно мы запихиваем туда все библиотеки. И его смысл в том, чтобы минимизировать объем.

Грубо говоря, если у вас есть инициализация, необходимая для UI, ее не нужно делать в апликейшне, потому что она опциональна и может запустить какой-то сервис. Нужно либо все уводить в фон, либо делать лэзи — это новый подход.

Может показаться, что пять секунд — это много, но поверьте, для бюджетных устройств с Android 8.0 это целая вечность. Код может просто не выполниться, и будет крэш. Особенно если есть какая-то сетевая операция в апликейшне. Поэтому не следует забывать его оптимизировать.

Ограничение на доступ к местоположению. Еще одно ограничение, связанное с безопасностью и сохранением заряда батареи. Если приложение в фоне, оно будет получать обновления не чаще, чем несколько раз в час. Сколько именно раз — мы не знаем.

Снятие WakeLock системой. При переходе приложения в состояние cached (отсутствуют активные Android-компоненты) все WakeLock, захваченные системой, освободятся. WakeLock — это спец-API, которое позволяет системе блокировать ненужное. Например, если система видит, что сейчас ничего не используется и девайс уходит в сон, можно выключить процессор. WakeLock как бы говорит системе: не выключай процессор, я собираюсь его использовать. Соответственно, идет нагрузка на железо. И если приложение переходит в состояние cached, значит, в нем нет активных Service и Activity, никто не вызывает у него контент-провайдер или бродкаст-ресиверы. Все WakeLock для него автоматически снимут.

Android 9.0

App StandBy Buckets. Так называемые корзинки — новый подход к тому, какие приложения нужно останавливать и как. Если раньше приложение уходило в бэкграунд, система полагала, что его нужно остановить. Теперь система анализирует, как приложения используют, и распределяет их по категориям:

Каждому бакету соответствовал определенный набор ограничений

  • Active — с приложением работает пользователь или другое приложение в состоянии Active;
  • Working Set — приложение используют часто, но сейчас пользователь с ним не работает;
  • Frequent — приложение используют регулярно, но не обязательно каждый день;
  • Rare — приложение используют редко;
  • Never — приложение установили, но пользователь никогда не запускал его. Выключено все.

Улучшение режима экономии энергии. Его сделали сильнее, введя больше ограничений:

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

Разрешение на запуск Foreground Service. Оно не критично, потому что попадает в категорию normal. Его нужно только декларировать в манифесте, а запрашивать в рантайме не нужно. Фактически оно помогает системе понять, что вы запросили пермишн — за вами можно следить. Если попытаться запустить Foreground Service без разрешения, система все крэшнет и скажет, что у вас SecurityException.

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

Обновление JobScheduler. Появилась поддержка информации о размере загружаемого файла. На основе этой информации система могла понимать: если вы грузите маленький файл, вас можно пропустить быстро. А если файл большой, лучше дождаться, когда будет нетарифицируемая сеть и высокий уровень заряда.

Еще появилась важная штука для предзагрузки контента. Если приложению нужно предзагрузить данные для отображения, например, главного экрана, можно пометить джобу с помощью этого нового флага, и JobScheduler поднимет ее приоритет.

Android 10

Тип Foreground Service. Новая штука, которая позволяет системе понять, зачем нужен Foreground Service, и приоритизировать его. Всего типов восемь, других быть не должно:

  • Camera — использует камеру, делает фото и записывает видео;
  • ConnectedDevice — работает с bluetooth-устройствами, авто и прочим;
  • DataSync — передача данных по сети, бэкап/восстановление, загрузка файлов;
  • Location — GPS, карта или навигация;
  • MediaPlayback — проигрывание звука и видео;
  • MediaProjection — управление проекцией медиа, например запись видео с экрана, снятие скриншота и так далее;
  • Microphone — использует микрофон или записывает аудио;
  • PhoneCall — операции, связанные с телефонными и видеозвонками и похожими коммуникациями.

Важно, что у одного Foreground Service может быть объявлено несколько типов. Теперь их можно явно указывать при запуске. Например, один из типов, объявленных в манифесте, вообще не будет работать в операциях этого типа либо будет запускать все сразу.

class MediaService : Service() < override fun onCreate() < super.onCreate() // Сделать Service Foreground с одним из типов, указанных в AndroidManifest startForeground(NOTIF_ID, newNotification(), ServiceInfo.FOREGROUND_SERVICE_TYPE_MEDIA_PLAYBACK) // Сделать Service Foreground со всеми типами из AndroidManifest startForeground(NOTIF_ID, newNotification(), ServiceInfo.FOREGROUND_SERVICE_TYPE_MANIFEST) // Сделать Service Foreground без использования типов startForeground(NOTIF_ID, newNotification(), ServiceInfo.FOREGROUND_SERVICE_TYPE_NONE) >>

Запрет на запуск Activity из фона. Раньше, если приходил пуш, можно было запустить Activity из бродкаст-ресивера. Теперь так нельзя: любой показ UI должен инициировать пользователь. Например, можно показать уведомление. Если пользователь нажимает на него, мы получаем разрешение на запуск активити. Если это не так, будет крэш.

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

Android 11

Самое интересное и самое разочаровывающее для меня — что в Android 11 ничего не ограничили. Поэтому мы переходим к…

Android 12

Restricted App Standby Bucket. Самый жесткий бакет: если приложение потребляет много системных ресурсов или работает нежелательным образом, система поместит его туда. Формулировки расплывчатые, но, скорее всего, речь идет о зловредах.

Ограничения запуска Foreground Service. Приложения в фоне не могут запускать Foreground Service за исключением нескольких случаев. Список исключений очень маленький.

Разрешение на Exact Alarm. Раньше это можно было делать как угодно, а теперь появился пермишн. И это не какой-нибудь runtime permission, а такая интересная штука, как Picture-in-Picture. То есть мы должны сказать пользователю: сходи в настройки системы и разреши моему приложению это делать. С одной стороны, это неудобно, с другой — полезно. Многие разработчики сталкивались с тем, что Exact Alarm срабатывали непредсказуемо или не срабатывали вовсе. А пермишн — это стандартизация и явный сигнал системе. Главное — помнить, что Exact Alarm не обязательно вызовется в нужное нам время. Это может случиться позже на несколько минут или больше.

Expedited Job. Новый тип Job для важных задач, которые нужно выполнить мгновенно. Злоупотреблять нельзя. Вот признаки такой джобы:

  • выполняется как можно скорее;
  • имеет меньше ограничений в режимах Doze и «Экономия батареи»;
  • на него не влияют ограничения доступа в сеть, накладываемые Doze, App Standby и режимом «Экономия батареи»;
  • имеет меньше шансов быть убитой, чем обычная Job;
  • ограничения на доступ к местоположению в фоне сохраняются;
  • для запуска работы доступны лишь требования по наличию сети, объему свободного места и сохранению Job между перезагрузками устройства.

У этого типа есть особенности, о которых полезно знать:

  • система выделяет квоту на количество одновременно запущенных Expedited Job для приложения;
  • на активное приложение квоты не распространяются;
  • может не запуститься сразу, если устройство слишком загружено или заданные для выполнения Job нельзя выполнить;
  • имеет ограниченное время на выполнение — не больше минуты (но система при низкой нагрузке может сделать исключения);
  • если у приложения осталась свободная квота, возможно, Expedited Job сможет работать дольше.

Android 13

Foreground Service Task Manager. Теперь пользователь может в специальном окошке в нотификейшн-панели увидеть, какие приложения сейчас что-то делают в Foreground. То есть свернуты, но пытаются что-то выполнять. Пользователь может вручную их остановить.

Специальная кнопка принудительно останавливает приложение. Не так, как Force Stop в настройках, но все же полностью его останавливает. Даже если оно просто свернуто.

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

  • Unrestricted — «делай что угодно, мне все равно»;
  • Restricted — когда приложение практически ничего не может делать в фоне.

В Restricted режиме будут применены следующие ограничения:

  • нельзя запускать Foreground Service;
  • запущенные Foreground Service убираются из Foreground;
  • не будет срабатывать Alarm;
  • не будет запускаться Job;
  • не будут доставляться бродкасты BOOT_COMPLETED и LOCKED_BOOT_COMPLETED.

Уведомление о слишком долгом Foreground Service. Система отслеживает, если приложение слишком долго работает в таком режиме, и рекомендует его остановить. Почему-то Google считает, что долго — это 20 часов в окне в 24 часа. Это странно, мне сложно представить приложение, которое так работает. Особенности работы в таком режиме:

  • Уведомление можно показывать не чаще чем раз в 30 дней;
  • Предупреждение не покажут, если уведомление, ассоциированное с Foreground Service, видно;
  • Исключения — сервисы с типами MediaPlayback и Location;
  • Системные приложения, приложения с определенными целями и устройства в деморежиме — тоже исключения.

Обновление JobScheduler. Появилась возможность поддержки дозагрузки файлов. Если сервер, с которого вы скачиваете файлы, поддерживает дозагрузку, можно эти данные указывать в Job. И если JobScheduler решит, что Job нужно остановить, потом он запустит ее, и вы будете знать, с какой части нужно продолжить выполнение.

Кроме этого, добавили приоритет Job. Это спецконстанта, которая помогает отсортировать все Job в рамках одного приложения и приоритизировать их выполнение.

Android сейчас

Download Manager по-прежнему с нами. JobScheduler мы больше не используем — на смену ему пришел Jetpack WorkManager.

Если говорить о сервисах, то background официально есть, но по факту его скорее нет. Foreground тоже есть, но там похожая ситуация. Bound есть, но их мало кто использует. Ну и AlarmManager никто не отменял.

Есть WorkManager — это официальная рекомендация Google для всех, кто хочет что-то делать в фоне. Вот его возможности:

  • корректная работа на разных версиях Android с учетом требований;
  • задание условий для выполнения задачи;
  • гибкие возможности времени выполнения задачи;
  • возможность выполнять работу незамедлительно;
  • гибкая политика по повтору задачи, выполненной неуспешно;
  • организация нескольких задач в цепочки, чтобы выполнять их последовательно и/или параллельно;
  • поддержка Coroutines и RxJava;
  • поддержка работы в нескольких процессах.

Если вам нужно запустить что-то в точное время и гарантировать выполнение, лучше по старинке использовать AlarmManager. А для простой загрузки файлов с сервера — DownloadManager. Нужно указать url, параметры и место, куда нужно сохранить.

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

Если конечного результата нет, это Foreground Service, причем он должен попадать под типы. Если нет совпадения с Foreground Service или нужно запустить Job немедленно и с очень высоким приоритетом, используйте Expedited Job в WorkManager. В остальных случаях — WorkManager.

Что и когда запускать

Но тут начинается веселье, потому что в игру вступают вендоры. Есть такой рейтинг — Don’t kill my app. Там ребята пишут подробные гайды с объяснениями, как различные вендоры убивают приложения. Довольно долго рейтинг возглавлял Xiaomi, потом в лидеры выбился One Plus, а потом Samsung обновил свои устройства до Android 11 и с сильным отрывом ушел вперед.

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

Единственный вариант, как попросить пользователя отключить все оптимизации для приложения — запустить стандартный Intent, который появился в Android 6.0, и молиться, чтобы пользователь это сделал. Тогда приложение может начать работать в фоне лучше, но результат никто не гарантирует.

// Android 6.0 API 23 val powerManager: PowerManager = getSystemService() if (!powerManager.isIgnoringBatteryOptimizations(context.packageName)) < try < context.startActivity(Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS)) >catch (e: ActivityNotFoundException) < // Обрабатываем если экрана нет >>

Кстати, вендоры любят по умолчанию глушить все приложения, которые не добавлены в white-list. Такой лист есть у каждого популярного вендора. Если ваше приложение довольно крупное, с несколькими миллионами пользователей, возможно, у вас получится договориться с вендором и попасть туда.

Заключение

Последние восемь лет Google пытается ограничить разработчиков и заставить их использовать специальные API, так как свобода выбора инструментов привела к хаосу на устройствах.

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

Это закономерно, ведь на старте у Google были доставшиеся в наследство исходники. Нужно было привлечь разработчиков и вендоров для популяризации Android. К 2014 году компания решила эту задачу и сменила вектор на обеспечение надежности, безопасности и приятного пользовательского опыта от работы с Android-устройствами.

  • android
  • мобильная разработка
  • фоновая работа
  • android 13
  • android 6
  • foreground service
  • background service
  • workmanager
  • оптимизация
  • энергосбережение
  • Блог компании TINKOFF
  • Блог компании Broadcasts Group
  • Разработка мобильных приложений
  • Разработка под Android

Зарядка подождёт: 10 способов продлить автономность Android-смартфона

Для оптимизации энергопотребления мобильного устройства на базе Android не обязательно его «рутовать» и устраивать танцы с бубном. Достаточно подкорректировать некоторые настройки операционной системы. Рассказываем, какие именно

⇣ Содержание

  • Удаление/замена ресурсоёмких приложений
  • Использование функции Adaptive Battery
  • Управление расходом энергии для фоновых процессов
  • Отключение уведомлений приложений
  • Отключение службы печати
  • Отключение отправки диагностических данных в Google
  • Ограничение доступа к геолокации для выбранных приложений
  • Отключение записи истории местоположений
  • Отключение фонового поиска сетей Wi-Fi и устройств Bluetooth
  • Отключение функции «Обмен с окружением»

В интернете представлено немало инструкций по продлению времени автономной работы Android-смартфона. Одни рекомендуют отключить вибровызов и использовать автоматическую настройку яркости дисплея, исходя из окружающего освещения. Другие советуют установить тёмную тему и выключить анимационные эффекты пользовательского интерфейса. Третьи с целью экономии энергии предлагают и вовсе кардинальные меры вроде отказа от LTE/4G, 3G, Wi-Fi, Bluetooth, GPS/ГЛОНАСС и использования для связи сетевой инфраструктуры исключительно стандарта 2G. Вариантов действий — бесчисленное множество. Мы выбрали среди них самые простые и в то же время наиболее эффективные. Итак, приступим!

 Источник изображения: VeComoHacerlo / pixabay.com

Источник изображения: VeComoHacerlo / pixabay.com

⇡#Удаление/замена ресурсоёмких приложений

Первый и самый важный шаг в деле экономии заряда мобильного устройства — вычисление программ, потребляющих наибольшее количество системных ресурсов и, как следствие, энергии. Вывести подобный софт на чистую воду можно в меню «Батарея», в окне «Расход заряда». Если в списке фигурируют не представляющие практической ценности приложения, от таких продуктов логичным будет избавиться. В противном случае можно либо принудительно приостановить выполнение прожорливых программ (помните, после перезагрузки смартфона они запустятся вновь!), либо заменить их менее ресурсоёмкими альтернативными решениями. Например, вместо установленных едва ли не на каждом гаджете нативных клиентов WhatsApp и Telegram можно использовать веб-версии мессенджеров, которые занимают меньше памяти и более экономичны. У некоторых разработчиков имеются облегчённые Lite-сборки программных решений — к таким продуктам тоже стоит присмотреться.

⇡#Использование функции Adaptive Battery

Начиная с Android 9, в мобильной платформе присутствует режим адаптивного использования батареи, позволяющий ограничить расходование ресурсов аккумулятора для редко запускаемых программ. Особенностью функции Adaptive Battery является алгоритм машинного обучения, который анализирует привычки пользователя при работе с установленным на смартфоне софтом и на основе собранной информации формирует приоритеты доступа приложений и фоновых процессов к системным ресурсам. Проще говоря, Android понимает, какие программы запускаются пользователем чаще, и пытается расходовать батарею прежде всего на них. Рекомендуем не оставлять функцию Adaptive Battery без внимания — она действительно работает, а активировать её можно в настройках операционной системы.

⇡#Управление расходом энергии для фоновых процессов

Помимо «умной» функции Adaptive Battery современные версии Android позволяют вручную регулировать расход заряда аккумулятора для приложений, работающих в фоновом режиме. Чтобы получить доступ к данной настройке, необходимо сделать долгий тап (нажать и удерживать в течение пары секунд) по ярлыку выбранной программы и далее проследовать в меню «О приложении → Батарея → Управление расходом заряда». На выбор доступны три варианта: «Без ограничений», «С оптимизацией» и «Ограничено». Последний позволяет добиться максимальной экономии энергии, однако использовать его надо с умом, поскольку самостоятельное вмешательство в системные процессы может нарушить стабильную работу программ.

⇡#Отключение уведомлений приложений

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

⇡#Отключение службы печати

Ещё один действенный способ экономии вычислительных ресурсов и заряда смартфона — деактивация функционирующих вхолостую системных сервисов, к коим относится служба печати. Мало кто использует Android-гаджеты в связке с принтерами, а поэтому упомянутую службу можно смело отключить в настройках операционной системы, в меню «Подключённые устройства → Настройки подключения → Печать → Служба печати по умолчанию».

⇡#Отключение отправки диагностических данных в Google

Вместе со службой печати правильным будет пустить под нож ещё один системный сервис, отвечающий за сбор различных диагностических данных и их последующую пересылку в компанию Google. Это высвободит пусть и незначительные, но всё же небесполезные ресурсы смартфона, а также пресечёт излишнее любопытство аналитиков технологического гиганта. Заветный ползунок для отключения отправки диагностических данных расположен в настройках ОС, в меню «Конфиденциальность → Дополнительно → Использование и диагностика».

⇡#Ограничение доступа к геолокации для выбранных приложений

В своей работе мобильные приложения нередко обращаются к геолокационным службам Android и используют сведения о местоположении пользователя. В большинстве случаев такое поведение является оправданным (типичный пример — навигационный софт), но бывают и исключения. В их числе: офисное ПО, программы для чтения книг и ведения заметок, почтовые клиенты, просмотрщики и редакторы фотографий, переводчики, плееры — эти и прочие приложения вполне могут обойтись без геоданных, заблокировать обращение к которым можно в настройках системы, в меню «Местоположение → Доступ приложений к геоданным». Для перечисленного софта выбираем «Доступ запрещён», для всего остального — «Разрешено только при использовании». Логика простая: чем меньше прикладное ПО будет инициировать запросы к геолокационным службам, тем реже Android будет затрачивать энергию для активации соответствующих аппаратных модулей.

⇡#Отключение записи истории местоположений

Службы геолокации активно используют не только сторонние приложения, но и интегрированные в Android сервисы Google. По словам компании, делается это с целью персонализации пользовательского опыта и демонстрации владельцу смартфона рекомендаций с учётом посещённых мест. Звучит красиво, но, когда стоит вопрос экономии заряда аккумулятора, имеет смысл пожертвовать этой функцией и отключить встроенный в систему трекер. Для этого следует открыть настройки устройства и далее проследовать в меню «Местоположение → Дополнительно → История местоположений → Отслеживание действий».

⇡#Отключение фонового поиска сетей Wi-Fi и устройств Bluetooth

Для повышения точности позиционирования на местности Android использует не только модули GPS, A-GPS, ГЛОНАСС, BeiDou, Galileo и информацию о расположении сотовых вышек, но и данные о точках доступа Wi-Fi и устройствах Bluetooth поблизости. Причём в последнем случае поиск сетей Wi-Fi и Bluetooth-маяков (таковые часто используются для отслеживания перемещений покупателей в крупных торговых центрах и маркетинговых исследований) производится автоматически даже в том случае, если соответствующие модули отключены пользователем. Если экономия заряда батареи важнее качества работы геолокационных служб, то данную функцию лучше отключить. Сделать это можно в настройках системы, в меню «Местоположение → Поиск сетей Wi-Fi и устройств Bluetooth».

⇡#Отключение функции «Обмен с окружением»

Наконец, последний предлагаемый нами метод оптимизации энергопотребления мобильного устройства предполагает отключение функции «Обмен с окружением» (Nearby Share), позволяющей передавать данные между Android-гаджетами по беспроводным интерфейсам, будь то Wi-Fi, Bluetooth, сотовая связь и даже NFC. Если смартфон используется только для телефонных разговоров, общения в интернете или просмотра веб-страниц, то смысла в активированной и постоянно сканирующей эфир на предмет входящих соединений функции Nearby Share нет никакого. Для её отключения следует выставить соответствующие настройки в меню «Подключённые устройства → Настройки подключения → Обмен с окружением».

На этом — всё. Уверены, что вам, уважаемые читатели, есть что добавить по теме. Оставляйте свои сообщения, делитесь мудрыми советами и неожиданными идеями в комментариях к обзору.

Как узнать, какие приложения разряжают аккумулятор телефона

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

Менее 1 мин. |
Содержание показать

Время автономной работы – важный показатель для любого пользователя. Но даже лучшие смартфоны со стереозвуком порой уступают в этом новейшим моделям. Одним из основных «виновников» частого разряда аккумулятора являются сторонние приложения, работающие в фоновом режиме. В этом руководстве мы расскажем, как выявить те приложения, которые незаметно «съедают» вашу батарею, и как контролировать их активность.

Как определить «жадные» приложения, пожирающие заряд вашего Android

Замечали, что ваш смартфон разряжается слишком быстро? За этим часто стоят приложения, работающие в фоновом режиме. В большинстве телефонов есть графики и списки, показывающие, какие приложения какой объем заряда потребляли. Давайте разберёмся, как это проверить.

Алгоритм действий для Samsung

Если у вас Samsung, например, Galaxy S23 на Android 13, процесс прост:

  1. Заходите в Настройки.
  2. Выбираете Аккумулятор и уход за устройством.
  3. Тапайте на Аккумулятор.
  4. Ищите кнопку Просмотреть подробности и касаетесь её.
  5. Тут список приложений, и вы видите, кто из них «ворует» больше всего заряда.

В графике можно посмотреть активность приложений за последний заряд или за семь дней. Заметили пастельно-розовый и лососевый цвета? Первый показывает, когда ваш телефон подзаряжался, а второй — когда приложения «кушали» заряд.

Если на графике вы видите резкий провал, возможно, недавно установленное приложение или обновление «не дружат» с вашим телефоном. Но чаще всего это просто пик активности.

Помните, время, когда устройство заряжается, на графике заряда не учитывается.

Проверка настроек потребления батареи в Xiaomi

На вашем Xiaomi у каждого приложения есть три режима потребления батареи: неограниченный, оптимизированный и ограниченный. Давайте разберёмся, как быстро узнать, какой режим установлен для конкретного приложения. В качестве примера берем Xiaomi Mi 11 с Android 13.

  1. Зайдите в «Настройки», а затем в «Аккумулятор».
  2. Тапайте на Использование батареи.
  3. Выберите приложение из списка Использование приложений с момента последней полной зарядки.
  4. Теперь вы видите активный режим потребления батареи для этого приложения.

Проверка потребления батареи приложениями на iPhone

Apple предоставляет удобный инструмент для просмотра потребления батареи каждым приложением. Давайте поглядим, как это сделать. Для демонстрации я выбрал iPhone 12 с iOS 16, но аналогично это работает и на iPhone 7 и более новых моделях.

  1. Зайдите в «Настройки», далее «Аккумулятор».
  2. Тапните на Использование батареи приложением.
  3. Чтобы увидеть детали, нажмите «Показать активность».

Есть распространенное заблуждение: будто приложения, оставшиеся в фоне, сильно разряжают аккумулятор из-за износа. На самом деле это не так. Многие приложения просто «замораживаются» после закрытия или завершения своих задач. Запуск приложения с нуля занимает больше энергии, чем его возобновление.

Прошу прощения за недоразумение. Давайте вставим ссылку обратно в текст.

Оптимизация заряда батареи на вашем мобильном устройстве

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

Управление активностью приложений

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

  1. Зайдите в «Настройки», далее «Приложения».
  2. Выберите интересующее приложение.
  3. Тапните Принудительная остановка, подтвердите действие, нажав ОК.

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

Режим энергосбережения: когда и как?

Режим энергосбережения – это инструмент, снижающий потребление ресурсов вашего устройства. Он может ограничивать фоновую активность приложений, отключать функции типа GPS и уменьшать яркость экрана. Это может снизить производительность, но заряд батареи продержится дольше.

Для активации режима перейдите в «Настройки» > «Аккумулятор» и включите «Энергосбережение».

Поддержание аккумулятора в хорошем состоянии

Оценка потребления батареи приложениями – это только начало. Найдя «проблемные» приложения, пора принимать меры. Большинство современных телефонов предоставляют широкий спектр инструментов для экономии энергии. Независимо от выбора – будь то стандартный режим энергосбережения или дополнительные настройки – есть множество путей решения этой задачи. Главное – найти наиболее подходящий для вас вариант. И не забудьте, что правильный уход за аккумулятором может продлить его срок службы.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *