Foreground Service – это сервис, о котором пользователь осведомлен. Это достигается с помощью отображения нотификации в статус-баре.
Пример foreground сервиса – отображение нотификации при проигрывании музыки в приложении-плеере.
Процесс в котором работает foreground сервис имеет больший приоритет, чем процесс с background сервисом. В примере с плеером foreground сервис выполняет сразу две функции:
1. Говорит системе, что этот процесс убивать не надо, т.к. пользователь взаимодействует с ним;
2. Обрабатывает нажатия на кнопки в нотификации.
Запущенный сервис переводится в состояние foreground методом startForeground(int id, Notification notification), принимающим параметрами
id
нотификации и саму нотификацию, которая будет показана пользователю. Важно знать, что startForeground()
вызывается у сервиса, который уже запущен как background сервис, например методом startService().Для перевода foreground сервиса в состояние background используется метод stopForeground(boolean removeNotification). Этот метод не останавливает сервис (нужно вызвать stopService() или stopSelf()), но увеличивает шансы того, что система убьет процесс.