Service или WorkManager?
Выбор владельца работы, повторные запуски и ограничения Android
Компонент и поток — разные вещи
Service — компонент без собственного UI. По умолчанию callbacks выполняются в главном потоке процесса приложения: тяжёлую работу нужно переносить явно. Foreground service повышает заметность работы для пользователя и требует уведомления, но не ускоряет вычисления и не делает процесс бессмертным. Android: Service.
Выбирайте по гарантии задачи
| Сценарий | Отправная точка |
|---|---|
| Загрузка данных только для открытого экрана | Корутина в scope владельца экрана |
| Отложенная синхронизация, важная после ухода из приложения | WorkManager |
| Длительная заметная пользователю работа, соответствующая типу FGS | Foreground service с учётом ограничений |
WorkManager сохраняет запланированную работу и учитывает ограничения, но не обещает точный момент старта. Возможны остановки и повторные попытки. Уникальная работа помогает управлять дубликатами планирования; это не гарантия «ровно один» внешнего побочного эффекта. WorkManager.
Повтор платежа — архитектурная ошибка
Если сервер принял операцию, а ответ потерян, retry может повторить побочный эффект. Договоритесь о стабильном ID операции и идемпотентности сервера; при повторе используйте тот же ID. Это вывод из сценария отказа, а не обещание WorkManager.
Уточняйте платформенные условия
Для приложений с target API 31+ Android 12+ ограничивает запуск foreground service из фона, с документированными исключениями. Для target API 34+ действуют требования к типам и разрешениям FGS. Проверяйте конкретный тип работы, версию ОС и target SDK. Ограничения FGS, типы FGS.
Основа отбора: draft/android.md, draft/faq500.md, draft/M++.md.