Может ли Android приложение не содержать Activity
Что проверяют
Знаете ли вы, что Activity это лишь один из четырёх компонентов приложения, и понимаете ли, как система запускает остальные. Следом почти всегда спрашивают: как такое приложение вообще стартует, если пользователю не на что нажать?
Как отвечать
Да, может. Манифест не обязан объявлять ни одной Activity, приложение вправе состоять только из других компонентов:
- Service: клавиатура (
InputMethodService), живые обои (WallpaperService), плитка в быстрых настройках (TileService), сервис специальных возможностей; - BroadcastReceiver: реакция на системные события. На нём же построены виджеты,
AppWidgetProviderэто наследник ресивера; - ContentProvider: отдаёт данные другим приложениям, интерфейс ему не нужен.
Интерфейс без Activity тоже бывает: виджет, уведомление, окно поверх других приложений из сервиса с разрешением SYSTEM_ALERT_WINDOW.
Дальше покажите, что знаете ограничения. После установки приложение находится в состоянии stopped: пока пользователь его явно не запустил, ресиверы не получают широковещательные события, даже BOOT_COMPLETED. Клавиатуре это не мешает, её включают в системных настройках, а «голому» ресиверу мешает. С Android 8 большинство неявных broadcast через манифест не доставляются, фоновые сервисы ограничены, поэтому долгую работу переносят в WorkManager или в foreground service с уведомлением и объявленным foregroundServiceType. На практике даже у клавиатуры обычно есть Activity настроек, просто без иконки в лаунчере.
Где спотыкаются
Называют ViewModel и LiveData заменой Activity. ViewModel живёт в ViewModelStore своего владельца, то есть Activity, фрагмента или элемента навигации, и компонентом приложения не является.
Путают Application с компонентом. Этот класс создаётся при старте процесса, но запустить процесс сам не может, это делает один из четырёх компонентов.
Обещают приложение-ресивер, которое «само проснётся после установки». Без первого ручного запуска и с учётом фоновых ограничений этого не произойдёт.