Служба – это компонент Android, который может выполнять работу без собственного пользовательского интерфейса, например воспроизводить музыку, синхронизировать данные или выполнять текущую передачу файла. Вместе с Activity, приемниками широковещательных сообщений и поставщиками контента службы относятся к четырем фундаментальным компонентам приложения в Android, и, как и остальные, они должны быть зарегистрированы в файле AndroidManifest.xml приложения. По умолчанию служба работает в главном потоке приложения, поэтому тяжелую работу все равно нужно переносить в фоновый поток.
Android различает запускаемые службы, которые выполняют задачу, пока их не остановят, и привязанные службы, к которым другие компоненты могут привязываться и с которыми могут взаимодействовать. Служба переднего плана выполняет работу, о которой знает пользователь, и должна показывать постоянное уведомление. Поскольку фоновая работа влияет на время работы от батареи и производительность, Android постепенно ввел ограничения на то, когда приложения могут запускать службы в фоновом режиме, и для откладываемой работы Google обычно рекомендует вместо этого WorkManager.
Служба в Android – это компонент приложения, который выполняет работу без собственного пользовательского интерфейса, например воспроизведение музыки, синхронизацию или передачу файлов. Ее можно запустить для выполнения задачи или к ней могут привязаться другие компоненты, которые хотят с ней взаимодействовать. Службы переднего плана показывают постоянное уведомление, чтобы пользователь знал, что работа выполняется, а из-за ограничений Android на фоновую работу для откладываемых задач часто используется WorkManager.
More about Служба
Служба – один из четырех фундаментальных компонентов приложения для Android наряду с Activity, приемниками широковещательных сообщений и поставщиками контента. Если Activity показывает экран, с которым взаимодействует пользователь, то служба используется для работы, которая не требует пользовательского интерфейса или должна продолжаться, даже если пользователь покинет экран. Типичные примеры – воспроизведение музыки или подкастов, навигация, загрузка файлов на сервер и синхронизация данных с сервером.
С технической точки зрения служба – это класс, наследуемый от android.app.Service и зарегистрированный с помощью элемента service в AndroidManifest.xml. Система управляет жизненным циклом службы через такие методы, как onCreate(), onStartCommand(), onBind() и onDestroy(). Важно знать, что служба не работает автоматически в отдельном потоке. По умолчанию ее код выполняется в главном потоке приложения, поэтому длительную или блокирующую работу нужно переносить в фоновый поток, например с помощью корутин Kotlin, чтобы приложение не перестало отвечать.
Службы можно использовать по-разному, и каждый вариант подходит для своих задач:
Служба переднего плана: Выполняет работу, о которой знает пользователь, например воспроизведение музыки или отслеживание активной тренировки. Служба переднего плана должна показывать постоянное уведомление, а в новых версиях Android приложение должно объявлять тип службы и иметь соответствующие разрешения.
Фоновая служба: Выполняет работу, которую пользователь не видит напрямую. Начиная с Android 8.0 действуют строгие ограничения на то, когда приложения могут запускать такие службы, находясь в фоновом режиме.
Привязанная служба: Предоставляет клиент-серверный интерфейс, через который другие компоненты, в том числе из других приложений, могут привязываться к службе, отправлять запросы и получать ответы. Привязанная служба существует, пока к ней привязан хотя бы один компонент.
Одна из самых сильных сторон служб в том, что они позволяют приложению продолжать важную работу, не привязывая ее к определенному экрану. В то же время они требуют осторожности, поскольку работа в фоновом режиме расходует заряд батареи, память и трафик. Поэтому Android постепенно ввел правила, ограничивающие фоновую работу, а пользователи могут видеть и останавливать приложения, в которых работают службы переднего плана.
Для многих задач Google рекомендует вместо этого WorkManager, который является частью Android Jetpack. WorkManager предназначен для работы, которая должна выполняться надежно, даже если приложение закрыто или устройство перезагружено, и которую можно отложить, например для загрузки файлов журналов или периодической синхронизации. WorkManager учитывает системные ограничения и может быть настроен с условиями, например наличием сетевого подключения или зарядки.
В целом служба – правильный выбор, когда приложению нужно выполнять текущую работу, продолжения которой ожидает пользователь, или когда другим компонентам нужно взаимодействовать с длительным процессом. Выбирая правильный тип службы или WorkManager, если работу можно отложить, разработчики могут создавать приложения, которые одновременно функциональны и бережно расходуют ресурсы устройства.
Frequently asked questions about Служба
Что такое служба в Android?
Служба – это компонент Android, который выполняет работу в фоновом режиме без собственного пользовательского интерфейса. Она используется для задач, которые должны продолжаться, даже когда пользователь не смотрит на приложение, например для воспроизведения музыки, текущей навигации или загрузки файлов.
Службу нужно объявить в файле AndroidManifest.xml. Важно знать, что по умолчанию служба работает в главном потоке приложения. Поэтому тяжелые задачи все равно нужно переносить в фоновый поток или корутину. В новых версиях Android также действуют строгие правила о том, когда приложения могут работать в фоновом режиме, чтобы экономить заряд батареи.
Какие типы служб существуют в Android?
Android различает три типа служб. Служба переднего плана выполняет задачу, о которой знает пользователь, и должна показывать уведомление все время, пока работает. Она используется, например, для воспроизведения музыки или отслеживания пробежки.
Фоновая служба выполняет работу, которую пользователь не видит напрямую. Начиная с Android 8.0 действуют строгие ограничения на то, когда приложения могут запускать такие службы, и для многих задач вместо них рекомендуется WorkManager. Привязанная служба позволяет другим компонентам, например Activity, привязываться к ней и взаимодействовать с ней, и она работает, только пока к ней что-то привязано.
В чем разница между запускаемой и привязанной службой?
Запускаемая служба запускается с помощью startService или startForegroundService и работает, пока не остановит себя сама или не будет остановлена. Обычно она выполняет определенную задачу и не возвращает результат напрямую компоненту, который ее запустил.
Привязанная служба запускается, когда другой компонент привязывается к ней с помощью bindService. Она предоставляет интерфейс, через который компонент может вызывать методы и получать ответы, например когда Activity управляет музыкальным плеером. Когда к ней больше не привязан ни один компонент, она останавливается. Служба также может быть и той, и другой одновременно, если она и запущена, и привязана.
Когда следует использовать WorkManager вместо службы?
WorkManager – рекомендуемое Google решение для фоновой работы, которая должна выполняться надежно, даже если приложение закрыто или устройство перезагружено. Это может быть синхронизация данных, загрузка файлов журналов или периодическая очистка.
WorkManager соблюдает системные правила в отношении батареи и фоновой активности и может быть настроен так, чтобы работать, например, только когда устройство подключено к Wi-Fi или заряжается. Служба, особенно служба переднего плана, больше подходит, когда работа должна выполняться немедленно и видна пользователю, например при воспроизведении музыки или текущем звонке. Для кратковременной работы, пока приложение открыто, часто достаточно корутин.
Почему служба переднего плана должна показывать уведомление?
Служба переднего плана может работать долго и использовать такие ресурсы, как процессор, батарея и данные о местоположении, пока приложение у пользователя не открыто. Поэтому Android требует, чтобы она показывала постоянное уведомление, и пользователь знал, что приложение работает в фоновом режиме.
Это обеспечивает прозрачность и позволяет пользователю остановить службу или открыть приложение. В новых версиях Android разработчики также должны объявлять тип службы, например воспроизведение медиа, местоположение или синхронизация данных, и иметь соответствующие разрешения. Начиная с Android 13 пользователь также должен дать разрешение на уведомления, что влияет на то, как отображается уведомление.
Какие ограничения Android накладывает на фоновую работу?
Чтобы экономить заряд батареи и защищать конфиденциальность пользователя, Android постепенно ввел ограничения на фоновую работу. Начиная с Android 8.0 приложениям в фоновом режиме, как правило, нельзя запускать обычные фоновые службы, и система останавливает их через короткое время.
Режим Doze и App Standby откладывают доступ к сети и задания, когда устройство не используется или приложение используется редко. Новые версии требуют указывать типы и разрешения для служб переднего плана и ограничивают, когда их можно запускать из фонового режима. Доступ к местоположению в фоновом режиме требует отдельного разрешения. Поэтому фоновую работу по возможности следует планировать с помощью WorkManager.
Служба for dummies
Служба в приложении для Android – это своего рода невидимый помощник, который может продолжать работать, даже когда на приложение никто не смотрит. Возьмем музыкальное приложение: можно включить песню, вернуться на главный экран и написать сообщение, а музыка продолжит играть. За это отвечает служба. Когда приложение использует службу для чего-то, о чем пользователь должен знать, телефон показывает небольшое уведомление, чтобы было понятно, что приложение работает. В то же время Android следит за тем, чтобы приложения не расходовали слишком много энергии в фоновом режиме, и батарея дольше держала заряд.