Любой сервис, не зависимо от того
Started или Bound, по умолчанию
Background. Это значит, что сервис работает как фоновая задача (
не путать с фоновым потоком), не требующая взаимодействия с пользователем.
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()), но увеличивает шансы того, что система убьет процесс.