Какие еще наследники Context существуют кроме Application и Activity
Что проверяют
Знаете ли вы реальную иерархию Context, а не список компонентов Android. Следом обычно спрашивают, чем контекст Application отличается от контекста Activity и когда замена одного другим приводит к падению или утечке.
Как отвечать
Context это абстрактный класс, настоящая реализация сидит в скрытом ContextImpl. Остальное построено на обёртках:
ContextWrapper: делегирует вызовы базовому контекстуmBase, который система подставляет черезattachBaseContext();Application: прямой наследникContextWrapper, живёт столько же, сколько процесс;Service: тоже прямой наследникContextWrapper, без темы. От него идутJobService,LifecycleService,InputMethodService,AccessibilityService;ContextThemeWrapper: добавляет тему. От него наследуетсяActivity, дальшеComponentActivity,FragmentActivity,AppCompatActivity. Его можно создать вручную, чтобы надуть View с другой темой;BackupAgent: наследникContextWrapperдля резервного копирования;MutableContextWrapper: обёртка, у которой базовый контекст подменяется на лету, например при переиспользованииWebView.
Ещё контексты создаются методами, а не наследованием: createConfigurationContext() для другой локали или конфигурации, createWindowContext() для окон вне Activity, createAttributionContext() для атрибуции доступа к данным.
Вывод, ради которого задают вопрос: тема экрана и привязка к окну есть только у Activity, поэтому разметку и диалоги делают от неё, а синглтоны и долгоживущие объекты получают applicationContext.
Где спотыкаются
Называют наследниками BroadcastReceiver, ContentProvider или Fragment. Ни один из них не Context: ресивер получает контекст аргументом в onReceive(), у провайдера есть getContext(), у фрагмента requireContext().
Показывают диалог от applicationContext и получают WindowManager.BadTokenException, либо надувают от него View и теряют тему экрана.
Сохраняют Activity в синглтоне или статическом поле. После поворота экрана старая Activity со всей иерархией View остаётся в памяти, это классическая утечка, которую ловит LeakCanary.