Android разработка как остановить приложение
Работа смартфона — весьма сложный процесс, который не прекращается ни на минуту даже ночью, когда телефон лежит у вас под подушкой. Большинство процессов в смартфоне продолжают свою работу незаметно для глаз пользователя и могут потреблять достаточно большое количество ресурсов.
Многие пользователи ошибочно считают, что оперативную память «съедают» те приложения, которые остаются свернутыми, и если их закрыть, можно таким образом освободить бОльшую часть памяти.
На самом деле это не так. Свернутые приложения, находящиеся в режиме ожидания — это лишь верхушка айсберга. По сути – это только кэшированные данные, которые позволяют вам вернуться в приложение без потери последних данных. Закрыв их, вы сможете лишь немного освободить оперативную память телефона. Основная же часть ресурсов приходится на процессы или службы приложений. Именно они потребляют оперативную память и расходуют заряд батареи даже тогда, когда приложение закрыто.
Не все из них одинаково полезны, но есть и те, которые могут отвечать за безопасность устройства и его стабильную работу. Тем не менее, если телефон стал слишком задумчивым и вы замечаете, что он потребляет заряд батареи, даже находясь в режиме ожидания, вам будет полезно узнать как ограничить работу фоновых процессов и тем самым освободить оперативную память устройства, а также повысить его быстродействие.
Как управлять фоновыми процессами
Получить расширенный контроль над фоновыми процессами можно с помощью специальных инструментов, встроенных в операционную систему. В смартфонах Android эта возможность реализована с помощью скрытого меню для разработчиков.
Как включить параметры разработчика
Для того, чтобы активировать режим разработчика, необходимо перейти в Настройки телефона, открыть пункт «Сведения о телефоне», затем «Сведения о ПО» и несколько раз подряд нажать на пункт «Номер Сборки» до появления системного уведомления о том, что режим разработчика активирован.
Затем нужно вернуться назад, в главные настройки. Если все было сделано правильно, вы увидите, что внизу появился новый пункт меню «Параметры разработчика».
Как управлять фоновыми процессами
Для того, чтобы управлять фоновыми процессами, в меню «Параметры разработчика» необходимо найти пункт «Приложения». Здесь находится несколько параметров, отвечающих за работу фоновых процессов. Например, параметр «Вытеснение фоновых Activity» позволяет принудительно останавливать действия приложений после их закрытия (не рекомендуем включать), а параметр ANR в фоновом режиме — отображать фоновые уведомление в случае, когда какой-то процесс не отвечает.
Больше всего нас здесь интересует параметр «Лимит фоновых процессов», который позволяет выбрать какое количество процессов будет использоваться вашим смартфоном в фоне. Данное ограничение затрагивает в основном сторонние приложения, установленные пользователем, поэтому можно не переживать за работающие системные службы.
По умолчанию здесь установлено значение «Стандартное ограничение».
Для слабых смартфонов с небольшим количеством оперативной памяти можно ограничиться значением «не более 1−2 процессов». Для устройств «пошустрее» можно установить лимит «не более 4 процессов».
Полное отключение фоновых процессов может повлиять на корректную работу некоторых приложений, поэтому мы не рекомендуем использовать данную функцию по максимуму, особенно если вы активно пользуетесь мессенджерами, почтой и другими приложениями, которые требуют проверки уведомлений.
Заключение
Теперь вы знаете, как, изменив лимит фоновых процессов, можно существенно снизить потребление оперативной памяти и повысить общее быстродействие смартфона. Но помните, что использовать меню разработчика стоит только в том случае, если у вас наблюдаются существенные проблемы в работе устройства и не пренебрегайте этим правилом без крайней необходимости, в противном случае есть риск навредить работе гаджета.
Приложения, которые работают в фоновом режиме, совсем не так безобидны, как кажется на первый взгляд. Даже если они написаны проверенными разработчиками и ничего вредоносного за ними не стоит, у них есть один существенный минус, который перекрывает многие плюсы. Минусом этим является сильное влияние на время автономной работы. Когда приложение на экране и работает только тогда, когда смартфон разблокирован, вы можете контролировать время его работы. В остальных случаях оно делает что-то само по себе и никто не знает, когда оно начнет скачивать данные или просто определять положение устройства через GPS. С этим сталкиваются все и в этой статье я дам несколько полезных советов, что с этим делать.
С фоновыми процессами надо быть осторожней.
Портится ли смартфон со временем
Многие пользователи часто думают, что со временем их смартфон просто испортился и поэтому перестал держать заряд, начал медленнее работать и чаще зависать. Конечно, небольшой износ у смартфонов действительно есть, но он не оказывает такого влияния, как сам пользователь. Особенно это относится к устройствам на Android. Именно они с годами обрастают фоновыми приложениями, расширениями и прочей чешуей, которая оказывает куда большее влияние на гаджет, чем просто старение плат.
Как контролироваться фоновые процессы в телефоне?
В некоторых случаях, прежде чем вы сможете начать настраивать параметры, вам нужно включить параметры разработчика. Для этого надо открыть ”Настройки”, далее ”О телефоне”, а затем несколько раз нажать на поле ”Номер сборки” (около семи раз). Вы получите уведомление о том, что параметры разработчика были разблокированы, как только вы закончите.
Первым делом перейдите в ”Настройки”, далее ”Система”, потом ”Дополнительно” и ”Параметры разработчика”. В этом меню надо найти пункт ”Работающие службы”. Внутри вы увидите, какие приложения потребляют оперативную память и сможете их установить. Но важно понимать, если вы не знаете, что останавливаете, вы можете сделать только хуже. Останавливайте только то, что сами запускали.
Опасно ли останавливать фоновые процессы Android
В системе есть ”защита от дурака” и остановить что-то, что действительно может привести к критической ошибке, скорее всего, не получится, но испытывать судьбу не стоит.
Чтобы остановить процесс, надо будет открыть выбранное приложение и нажать ”остановить”. Все просто.
7 крутых виджетов для Android, которые я советую попробовать
Если вы сомневаетесь или просто не хотите останавливать процессы из этого меню, можно зайти в другое место. Откройте ”Настройка”, далее ”Приложения”, после этого откройте список приложений и нажмите в правом верхнем углу значок с тремя точками. Там выберите ”Показать системные процессы”.
Из-за чего садится батарея телефона
А теперь разберем, от чего именно садится батарея вашего телефона. Способы анализа, приведеные выше, бесспорно хороши, но есть в них и минусы. Они не показывают непосредственного воздействия приложения на аккумулятор. Чтобы понять, сколько процентов потратили процессы каждого конкретного приложения, надо открыть ”Настройки”, далее ”Аккумулятор”. Тут вы можете найти информацию о том, какие приложения работают и насколько активно они сажают аккумулятор. Так будет еще проще решить, что остановить или и вовсе удалить.
С каждой новой версией Android количество систем автоматического сохранения заряда увеличивается. Это означает, что со временем количество настроек может сократиться.
Обсудить стоит ли пользоваться определенными приложениями вы можете в нашем Telegram-чате. Там всегда есть кто-то, кто может что-то посоветовать.
Много споров и дискуссий всегда вызывали сторонние приложения для оптимизации работы смартфона. С одной стороны, они позволяют не задумываться о том, как и что надо сделать, чтобы остановить ненужные процессы, но могут быть в таких приложениях и минусы.
Главным минусом будет то, что такие приложения могут сами еще больше сажать аккумулятор. На это жалуются многие пользователи. Иногда действительно проще сделать все вручную, чем доверять все автоматике.
Совершенно новые телефоны удивительны, но со временем ваше новое устройство замедляется. Переключение между приложениями разочаровывает, а батарея не выдерживает и дня. Если это звучит знакомо, есть несколько вещей, которые вы можете сделать, чтобы вернуть себе контроль над своим смартфоном и улучшить ситуацию, и одно из самых верных решений, это получить контроль над приложениями, работающими в фоновом режиме.
Контролируйте фоновые процессы
Лучший способ получить контроль над вашими процессами - это покопаться под капотом с помощью инструментов мониторинга, встроенных в Android. Как выглядит эта опция, зависит от того, какая компания создала устройство и какую версию Android вы используете.
В некоторых случаях, прежде чем вы сможете начать, вам нужно включить параметры разработчика .
- В большинстве версий Android для этого нужно перейти в « Настройки»> «О телефоне» и затем нажать «Номер сборки» около семи раз. По завершении вы получите уведомление о том, что параметры разработчика были разблокированы.
- Для многих мобильных телефонов следующим шагом будет поиск настройки, которая называется «Процессы» , «Статистика процессов» или «Запущенные службы». Вы можете найти всё это в Настройки > Система > Дополнительно > Параметры разработчика > Службы . Эта опция приведёт вас к списку запущенных процессов, показывающих, сколько ОЗУ использует каждый.
- Очевидно, будет заманчиво помешать большинству приложений, требующих ОЗУ, работать в фоновом режиме, но вы должны уделить некоторое внимание, прежде чем остановите процессы. Остановка некоторых приложений может привести к поломке телефона.
- Вы также можете нажать параметр настроек в меню «Службы / Процессы», чтобы переключаться между запущенными процессами и кэшированными процессами.
Некоторые телефоны, такие как Meizu M3 Max, с которым мы проводили тесты, не позволят вам получить доступ к опциям разработчика, нажав номер сборки, и имеют свой собственный особый метод.
Я в меню! Но я не знаю, какие приложения остановить
ХОРОШО. Если вы не хотите, чтобы ваш телефон завис, соблюдайте осторожность и используйте здравый смысл. Приложение с пометкой «Сервисы Google» или почти любое приложение, которое начинается с «Google» , не следует останавливать вручную . Кроме, пожалуй, Youtube, книги, музыка и подобных.
С другой стороны, если вы просматриваете список и видите, что мессенджеры и музыкальные плееры в фоновом режиме разряжают вашу батарею, вы можете остановить. Действительно важные приложения, как правило, не позволят вам остановить их.
- Чтобы вручную остановить приложение через список процессов, перейдите в «Настройки» > «Параметры разработчика» > «Процессы» и нажмите кнопку «Стоп» . Вуаля!
Итак, в приведенном выше примере мы не использовали Kik, Facebook Pages Manager или несколько других запущенных сервисов, поэтому остановили их без ошибок. В некоторых случаях вы можете обнаружить, что служба запускается снова автоматически.
Если вы нажмете опцию «Дополнительно / Настройки» (в зависимости от модели вашего телефона), вы также можете просмотреть оперативную память, используемую кэшированными процессами. Те же правила, которые приложения могут безопасно остановить, применяются как к кэшированным, так и к запущенным процессам.
Для завершения работы приложений, которые так просто не завершаются, как "Кик" для нас (если вы убьете его через вкладку процессов, оно просто перезапуститься), вы можете перейти в меню Настройки > Приложения > Диспетчер приложений и выполнить там принудительную остановку или удаление приложения.
Теперь пришло время поближе взглянуть на то, что разряжает вашу батарею
Если вы были внимательны во время выполнения описанных выше шагов, вы, вероятно, видели подробную информацию о расходе аккумулятора для каждого приложения. Хотя это замечательно, работа над тем, что расходует заряд аккумулятора, оценивая каждое приложение в отдельности, займет у вас целый день.
Вместо этого вам следует перейти в «Настройки» > «Аккумулятор» и посмотреть, какие параметры доступны на вашем телефоне. Опять же, параметры могут иметь несколько разные имена и доступные функции, но, как минимум, вы сможете увидеть список приложений, которые использовали больше всего заряда батареи с момента вашей последней работы. Затем вы можете решить, какие из них вы хотите остановить индивидуально.
Те же правила применяются к остановке или удалению приложений, которые применялись для их остановки на вкладке процессов, вы должны быть осторожными с тем, что вы начинаете завершать. Некоторые телефоны разделяют приложения на вкладке «Использование батареи» на системные или несистемные, а другие разделяют их на список «аппаратных» и «программных» приложений.
В Android Marshmallow самым значительным улучшением стала Doze, которая по сути переводит ваш телефон в режим гибернации, когда он не двигается.
Для Android Nougat и Doze 2.0 эта функция теперь работает, когда ваш телефон движется, но не используется.
Android Oreo налагает ограничения на фоновое выполнение, чтобы приложения не сходили с ума от фоновых сервисов и не оставляли сервисы прослушивания всегда открытыми.
Samsung (и другие) во многих случаях предлагают фирменные опции для увеличения заряда батареи и ОЗУ, поэтому доступные вам функции могут отличаться.
Службы (Сервисы) в Android работают как фоновые процессы и представлены классом android.app.Service. Они не имеют пользовательского интерфейса и нужны в тех случаях, когда не требуется вмешательства пользователя. Сервисы работают в фоновом режиме, выполняя сетевые запросы к веб-серверу, обрабатывая информацию, запуская уведомления и т.д. Служба может быть запущена и будет продолжать работать до тех пор, пока кто-нибудь не остановит её или пока она не остановит себя сама. Сервисы предназначены для длительного существования, в отличие от активностей. Они могут работать, постоянно перезапускаясь, выполняя постоянные задачи или выполняя задачи, требующие много времени.
Клиентские приложения устанавливают подключение к службам и используют это подключение для взаимодействия со службой. С одной и той же службой могут связываться множество клиентских приложений.
Android даёт службам более высокий приоритет, чем бездействующим активностям, поэтому вероятность того, что они будут завершены из-за нехватки ресурсов, заметно уменьшается. По сути, если система должна преждевременно завершить работу запущенного сервиса, он может быть настроен таким образом, чтобы запускаться повторно, как только станет доступно достаточное количество ресурсов. В крайних случаях прекращение работы сервиса (например, задержка при проигрывании музыки) будет заметно влиять на впечатления пользователя от приложения, и в подобных ситуациях приоритет сервиса может быть повышен до уровня активности, работающей на переднем плане.
Используя сервис, можете быть уверены, что ваши приложения продолжат работать и реагировать на события, даже если они в неактивном состоянии. Для работы службам не нужен отдельный графический интерфейс, как в случае с активностями, но они по-прежнему выполняются в главном потоке хода приложения. Чтобы повысить отзывчивость вашего приложения, нужно уметь переносить трудоёмкие процессы (например, сетевые запросы) в фоновые потоки, используя классы Thread и AsyncTask.
Службы идеально подходят для проведения постоянных или регулярных операций, а также для обработки событий даже тогда, когда активности вашего приложения невидимы, работают в пассивном режиме или закрыты.
Сервисы запускаются, останавливаются и контролируются из различных компонентов приложения, включая другие сервисы, активности и приёмники широковещательных намерений. Если ваше приложение выполняет задачи, которые не зависят от прямого взаимодействия с пользователем, сервисы могут стать хорошим выбором.
Запущенные сервисы всегда имеют больший приоритет, чем бездействующие или невидимые активности, поэтому менее вероятно, что их работа завершится преждевременно при распределении ресурсов. Единственная причина, почему Android может досрочно остановить Сервис, — выделение дополнительных ресурсов для компонентов, работающих на переднем плане (как правило, для активностей). Если такое случится, ваш сервис автоматически перезапустится, когда будет достаточно доступных ресурсов.
Когда сервис напрямую взаимодействует с пользователем (например, проигрывая музыку), может понадобиться повысить его приоритет до уровня активностей, работающих на переднем плане. Это гарантия того, что сервис завершится только в крайнем случае, но при этом снижается его доступность во время выполнения, мешая управлять ресурсами, что может испортить общее впечатление от приложения.
Приложения, которые регулярно обновляются, но очень редко или нерегулярно взаимодействуют с пользователем, можно назвать первыми кандидатами на реализацию в виде сервисов. Проигрыватели MP3 и приложения, отслеживающие спортивные результаты, — примеры программ, которые должны постоянно работать и обновляться без необходимости отображать активность.
Создание службы
Чтобы определить службу, необходимо создать новый класс, расширяющий базовый класс Service. Можно воспользоваться готовым мастером создания класса для сервиса в Android Studio. Щёлкаем правой кнопкой мыши на папке java (или на имени пакета) и выбираем New | Service | Service:
В следующем окне выбираем имя сервиса (флажки оставляем) и нажимаем кнопку Finish.
При этом сервис автоматически зарегистрируется в манифесте в секции <application>.
Если бы мы убрали флажки на экране мастера, то оба атрибута имели бы значение false. Например, атрибут exported даёт возможность другим приложениям получить доступ к вашему сервису.
Имеются и другие атрибуты, например, permission, чтобы сервис запускался только вашим приложением.
Также вы можете обойтись без мастера и создать вручную класс сервиса и запись в манифесте, теперь вы знаете, из чего он состоит.
Жизненный цикл служб
Подобно активностям служба имеет свои методы жизненного цикла:
Для быстрого создания заготовок нужных методов используйте команду меню Code | Override Methods. или набирайте сразу имя метода, используя автодополнение.
Реализуя эти методы обратного вызова в своей службе, вы можете контролировать жизненные циклы службы. В полном жизненном цикле службы существует два вложенных цикла:
- полная целая жизнь службы — промежуток между временем вызова метода onCreate() и временем возвращения onDestroy(). Подобно активности, для служб производят начальную инициализацию в onCreate() и освобождают все остающиеся ресурсы в onDestroy()
- активная целая жизнь службы — начинается с вызова метода onStartCommand(). Этому методу передаётся объект Intent, который передавали в метод startService().
Из своего приложения службу можно запустить вызовом метода Context.startService(), остановить через Context.stopService(). Служба может остановить сама себя, вызывая методы Service.stopSelf() или Service.stopSelfResult().
Можно установить подключение к работающей службе и использовать это подключение для взаимодействия со службой. Подключение устанавливают вызовом метода Context.bindService() и закрывают вызовом Context.unbindService(). Если служба уже была остановлена, вызов метода bindService() может её запустить.
Методы onCreate() и onDestroy() вызываются для всех служб независимо от того, запускаются ли они через Context.startService() или Context.bindService().
Если служба разрешает другим приложениям связываться с собой, то привязка осуществляется с помощью дополнительных методов обратного вызова:
- IBinder onBind(Intent intent)
- onUnbind(Intent intent)
- onRebind(Intent intent)
В метод обратного вызова onBind() передают объект Intent, который был параметром в методе bindService(), а в метод обратного вызова onUnbind() — объект Intent, который передавали в метод unbindService(). Если служба разрешает связывание, метод onBind() возвращает канал связи, который используют клиенты, чтобы взаимодействовать со службой. Метод обратного вызова onRebind() может быть вызван после onUnbind(), если новый клиент соединяется со службой.
Запуск сервиса и управление его перезагрузкой
В большинстве случаев также необходимо переопределить метод onStartCommand(). Он вызывается каждый раз, когда сервис стартует с помощью метода startService(), поэтому может быть выполнен несколько раз на протяжении работы. Вы должны убедиться, что ваш сервис это предусматривает.
Метод onStartCommand() заменяет устаревший метод onStart(), который использовался в Android 2.0. В отличие от onStart() новый метод позволяет указать системе, каким образом обрабатывать перезапуски, если сервис остановлен системой без явного вызова методов stopService() или stopSelf().
Службы запускаются в главном потоке приложения; это значит, что любые операции, выполняющиеся в обработчике onStartCommand(), будут работать в контексте главного потока GUI. На практике при реализации сервиса в методе onStartCommand() создают и запускают новый поток, чтобы выполнять операции в фоновом режиме и останавливать сервис, когда работа завершена.
Такой подход позволяет методу onStartCommand() быстро завершить работу и даёт возможность контролировать поведение сервиса при его повторном запуске, используя одну из констант.
- START_STICKY - Описывает стандартное поведение. Похоже на то, как был реализован метод onStart() в Android 2.0. Если вы вернёте это значение, обработчик onStartCommand() будет вызываться при повторном запуске сервиса после преждевременного завершения работы. Обратите внимание, что аргумент Intent, передаваемый в onStartCommand(), получит значение null. Данный режим обычно используется для служб, которые сами обрабатывают свои состояния, явно стартуя и завершая свою работу при необходимости (с помощью методов startService() и stopService()). Это относится к службам, которые проигрывают музыку или выполняют другие задачи в фоновом режиме
- START_NOT_STICKY - Этот режим используется в сервисах, которые запускаются для выполнения конкретных действий или команд. Как правило, такие службы используют stopSelf() для прекращения работы, как только команда выполнена. После преждевременного прекращения работы службы, работающие в данном режиме, повторно запускаются только в том случае, если получат вызовы. Если с момента завершения работы Сервиса не был запущен метод startService(), он остановится без вызова обработчика onStartCommand(). Данный режим идеально подходит для сервисов, которые обрабатывают конкретные запросы, особенно это касается регулярного выполнения заданных действий (например, обновления или сетевые запросы). Вместо того, чтобы перезапускать сервис при нехватке ресурсов, часто более целесообразно позволить ему остановиться и повторить попытку запуска по прошествии запланированного интервала
- START_REDELIVER_INTENT - В некоторых случаях нужно убедиться, что команды, которые вы посылаете сервису, выполнены. Этот режим — комбинация предыдущих двух. Если система преждевременно завершила работу сервиса, он запустится повторно, но только когда будет сделан явный запрос на запуск или если процесс завершился до вызова метода stopSelf(). В последнем случае вызовется обработчик onStartCommand(), он получит первоначальное намерение, обработка которого не завершилась должным образом.
Обратите внимание, что при окончании всех операций каждый из этих режимов требует явной остановки сервиса с помощью методов stopService() или stopSelf().
Режим перезапуска, который вы указываете в качестве значения, возвращаемого методом onStartCommand(), будет влиять на параметры, передаваемые при последующих вызовах.
Изначально намерение выступает в качестве параметра, который передастся в метод startService() при запуске сервиса. После перезапуска системой он может иметь значение null (если установлен режим START_STICKY) или оригинальное (если установлен флаг START_REDELIVER_INTENT).
Параметр flag может помочь узнать, как именно был запущен сервис:
- START_FLAG_REDELIVERY — указывает на то, что параметр Intent повторно передан при принудительном завершении работы сервиса перед явным вызовом метода stopSelf()
- START_FLAG_RETRY — указывает на то, что сервис повторно запущен после непредвиденного завершения работы; передается в том случае, если ранее сервис работал в режиме START_STICKY
Запуск и остановка служб
Начиная с Android 8.0 вы можете получить исключение IllegalStateException, если у приложения нет разрешения на запуск от системы.Чтобы запустить службу, в клиентском приложении необходимо вызывать метод startService(). Существует два способа вызова службы:
Пример для явного вызова службы с именем MyService:
Также можно явно определить службу, создав экземпляр класса этой службы.
Пример неявного вызова службы:
Чтобы использовать этот пример, необходимо включить константу SERVICE_ACTION, идентифицирующую службу, в класс MyService, например:
Используйте фильтр намерений, чтобы зарегистрировать его как провайдера SERVICE_ACTION. Если служба потребует разрешений, которые не имеет ваше приложение, то запрос вызовет исключение SecurityException.
Как только сервис завершил выполнение тех действий, для которых он запускался, вы должны вызвать метод stopSelf() либо без передачи параметра, чтобы ускорить остановку работы, либо передав значение startId, чтобы убедиться, что задачи выполнены для всех экземпляров, запущенных с помощью вызова startService(), как показано в следующем фрагменте:
Явная остановка сервиса по завершении необходимых задач позволяет системе получать обратно ресурсы, которые в ином случае оставались бы заняты. Поскольку приоритет сервисов повышенный, система, как правило, не завершает их работу, поэтому её окончание по собственной инициативе может существенно улучшить эффективность использования ресурсов вашим приложением.
Для остановки работы используйте метод stopService(), передавая ему объект Intent, определяющий нужный сервис.
Если метод startService() вызывается для сервиса, который уже работает, обработчик onStartCommand(), принадлежащий объекту Service, будет вызван повторно. Вызовы startService() не накапливаются, поэтому единственный вызов метода stopService() завершит работу сервиса, неважно, сколько раз производился вызов startService().
Давайте создадим практическое приложение для работы со службой. Наша служба будет запускать на воспроизведение музыкальный файл, который будет проигрываться в фоновом режиме. Управлять службой можно будет из активности. Создайте новый проект. Для службы создайте отдельный класс PlayService. Служба будет загружать музыкальный файл sample.mp3 из каталога res/raw/ (разместите там свой MP3-файл).
PlayService.java
Зарегистрируем службу в файле манифеста.
В файле разметки для активности определим две кнопки: Старт и Стоп:
В классе активности в обработчиках событий кнопок будем вызывать методы startService() и stopService() для управления службой.
Запущенная служба будет выполняться независимо от состояния активности, несмотря на то, что эти компоненты находятся в одном приложении: если её завершить, служба все равно останется работать.
Приёмник регистрируется в манифесте с именем действия BOOT_COMPLETED:
Пример для Kotlin
Класс для службы, которая будет генерировать случайные числа через определённый промежуток времени. Не забудьте прописать службу в манифесте.
Разместите на экране активности три кнопки: запуск, остановка и статус службы. Код для активности.
Список всех запущенных сервисов
Ущемление прав службы
Google последовательно борется с ограничениями для служб, урезая их возможности. Делается это для того, чтобы службы не висели в памяти бесконечно долго и тратили заряд батареи. Ограничение возможностей происходит постепенно от версии к версии. В последних версиях уже можно столкнуться с примерами, когда выкидывается исключение при неправильной работе с службами.
Для решения проблем следует изучить такие вещи как JobScheduler, Firebase Job Dispatcher, WorkManager. Также появилось понятие Foreground service.
Системные службы
Кроме создания собственных сервисов, вы можете использовать системные сервисы. Вот небольшой список:
Читайте также: