Виды Context

В Android существует несколько различных типов контекста (Context), каждый из которых предоставляет доступ к разным системным ресурсам и функциональности. Вот некоторые из наиболее распространенных типов контекста и их различия:

Виды контекста

Application Context (Контекст приложения)

  • getApplicationContext() в Activity или context.applicationContext внутри другого контекста.
  • Существует на протяжении всего жизненного цикла приложения и обычно используется для доступа к глобальным ресурсам приложения, таким как файлы, SharedPreferences и базы данных.
  • Он не привязан к жизненному циклу Activity или Service, поэтому его использование предпочтительно для объектов, которые не требуют контекста с привязкой к конкретной Activity.

Activity Context (Контекст активности)

  • this внутри Activity.
  • Привязан к жизненному циклу конкретной Activity и обеспечивает доступ к ресурсам, связанным с этой Activity, таким как макеты, ресурсы строк, темы и другие.
  • Использование этого контекста предпочтительно, когда требуется доступ к ресурсам, специфичным для текущей Activity, или когда требуется контекст для создания диалогов, фрагментов и т. д.

Service Context (Контекст сервиса)

  • this внутри Service.
  • Аналогично Activity Context, но привязан к жизненному циклу сервиса.

Application Context vs Activity Context:

  • ApplicationContext может быть использован везде, где требуется контекст, тогда как ActivityContext связан с жизненным циклом Activity.
  • Использование ActivityContext вне жизненного цикла Activity может привести к утечкам памяти.
  • Использование ApplicationContext предпочтительно для объектов, которые должны существовать в течение всего жизненного цикла приложения, чтобы избежать утечек памяти.

Таблица возможностей разных контекстов

Application Activity Service Content Provider Broadcast Receiver
Show dialog - + - - -
Start activity - + - 1 - 1 - 1
Inflate layout - + - 2 - 2 - 2
Start service + + + + +
Bind to service + + + + -
Send to broadcast + + + + +
Register Broadcast receiver + + + + - 3
Load resource value + + + + +
  1. Application может запустить Activity, но новый Activity Task будет создан. Не рекомендуется к использованию, потому что может быть создан нестандартный activity stack.
  2. На самом деле здесь будет созданы вьюшки с дефолтной темой (определенной в Manifest.Application)
  3. DEPRECATED