Почему не использовать обычные сервисы вместо Foreground Service

«Почему не использовать обычные сервисы вместо Foreground Service» — вопрос из категории Android компоненты, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Foreground Service требует уведомления, что повышает прозрачность для пользователя, но гарантирует работу приложения в фоне даже при ограничениях системы (начиная с Android 8+). Обычные сервисы могут быть убиты системой для оптимизации ресурсов, особенно в Doze Mode или App Standby.

Пример объявления Foreground Service:

val notification = NotificationCompat.Builder(this, CHANNEL_ID)
    .setContentTitle("Service running")
    .setSmallIcon(R.drawable.ic_notification)
    .build()

startForeground(1, notification)

Ключевые отличия:

  • Видимость: Foreground Service всегда показывает уведомление.
  • Приоритет: Система реже убивает Foreground Service.
  • Ограничения: Обычные сервисы не работают в фоне на Android 9+ без foreground.

Используйте обычные сервисы для кратковременных задач, Foreground — для длительных (музыка, GPS, загрузки).