Что такое IntentService и чем он отличается от других сервисов в Android
Что проверяют
Знание жизненного цикла фоновых компонентов и то, следите ли вы за изменениями платформы. Вопрос сегодня почти исторический, и сильный ответ обязан назвать не только устройство IntentService, но и причину, по которой его пометили устаревшим.
Как отвечать
IntentService это наследник Service, который сам заводит один рабочий поток и очередь: каждый вызов startService кладёт Intent в очередь, onHandleIntent получает их строго по одному, а когда очередь пустеет, сервис вызывает stopSelf и завершается.
Отличия, которые ждут услышать:
- обычный Service получает колбэки в главном потоке, поток под работу создаёте вы сами, останавливать сервис тоже нужно руками; зато он может стать foreground с постоянным уведомлением и работать долго;
- IntentService снимает обе заботы, но платит последовательностью: две задачи параллельно он не выполнит, а отменить начатую нечем;
- JobIntentService был переходным решением: та же модель, но работа уходила в планировщик заданий и переживала ограничения фонового запуска.
Дальше называем современную замену: WorkManager для отложенной работы, которая должна быть выполнена гарантированно и пережить перезапуск, корутины или пул потоков для короткой работы внутри живого процесса, foreground service для того, что видит пользователь.
Где спотыкаются
Рассказывают про IntentService как про текущую рекомендацию. Начиная с восьмой версии Android фоновый запуск обычных сервисов ограничен, вызов startService из фона падает с исключением, и именно поэтому класс объявлен устаревшим.
Думают, что он даёт параллелизм. Очередь строго последовательная: долгая задача задержит все следующие, а если параллелизм нужен, берут свой пул потоков или несколько независимых заданий.
Трогают интерфейс прямо из onHandleIntent или держат ссылку на экран. Код исполняется в рабочем потоке, а активити к этому моменту может быть уничтожена; результат отдают через широковещательное сообщение, общий репозиторий или наблюдаемые данные.