Как создается контекст в Android? Какова цель ContextThemeWrapper?

Я помогаю собрать эту страницу: что такое контекст?

Чтобы проиллюстрировать, как компоненты связаны с Context, я создал эту диаграмму, просматривая исходный код рамки:

Context Subclasses

После того, как я раскололся, у меня возникли следующие вопросы:

  1. Что создает Context и какие конкретные классы используются? Базовый класс Context сам по себе является абстрактным классом, который требует почти всех его методов для реализации. И ContextWrapper, при ContextWrapper экземпляра, требует, чтобы экземпляр Context был передан в качестве базового контекста, поэтому должен быть хотя бы один конкретный класс Context.
  2. Я понимаю, что ContextWrapper и его подклассы используют шаблон оболочки/декоратора, чтобы добавить функциональность к базовому классу Context мере необходимости. Какова цель ContextThemeWrapper? Он переопределяет несколько методов, но если он обертывает базовый Context, почему бы просто не делегировать вызовы базовому Context? Например, класс Activity расширяет ContextThemeWrapper, который обеспечивает конкретную реализацию для getTheme() и setTheme(). Зачем?

Разработчики Java-разработчиков Android немного расплывчаты. Например, ContextWrapper

Ответы

Ответ 1

Ответ # 2:

ContextThemeWrapper добавляет поддержку контекста в контекст, иначе вы не сможете применить какую-либо тему к создаваемым представлениям. Вот почему макеты мероприятий поддерживают темы, а макеты виджетов - нет. Вы также можете создать ContextThemeWrapper самостоятельно, чтобы переопределить текущую тему другим.