Что такое Service в Android и какие типы сервисов существуют?

«Что такое Service в Android и какие типы сервисов существуют?» — вопрос из категории Архитектура, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Service — компонент Android для выполнения длительных операций в фоне без пользовательского интерфейса.

Два основных типа:

  1. Started Service (Запущенный сервис)

    • Запускается вызовом startService() из Activity или другого компонента.
    • Работает независимо от запустившего его компонента.
    • Должен быть явно остановлен вызовом stopSelf() или stopService().
  2. Bound Service (Связанный сервис)

    • Создаёт клиент-серверное взаимодействие через bindService().
    • Работает, пока есть хотя бы один привязанный клиент.
    • Все клиенты отвязываются — сервис уничтожается системой.

Пример объявления простого Started Service:

public class MyService extends Service {
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        // Выполнение фоновой задачи
        return START_STICKY; // Поведение при убийстве системой
    }
    @Override
    public IBinder onBind(Intent intent) {
        return null; // Для Bound Service нужно вернуть реализацию IBinder
    }
}

Важные современные альтернативы и ограничения:

  • IntentService устарел. Для фоновых задач используйте WorkManager (гарантированное выполнение) или JobScheduler (для API 21+).
  • Начиная с Android 8 (API 26), введены строгие ограничения на фоновые сервисы. Приложение в фоне должно использовать startForegroundService() и показывать постоянное уведомление.
  • Сервис обязательно должен быть объявлен в AndroidManifest.xml.