Context (контекст) в Android — это абстрактный класс (android.content.Context), который предоставляет доступ к информации о состоянии приложения и системе. Это фундаментальная концепция, которая связывает компоненты приложения с Android-системой.
В Android есть несколько реализаций Context:
Получается через getApplicationContext(). Живет все время работы приложения.
val appContext = applicationContext
Когда использовать:
Получается через this в Activity. Привязан к жизненному циклу Activity.
class MainActivity : AppCompatActivity() {
val activityContext = this
}
Когда использовать:
Аналогичен Application Context, но привязан к жизненному циклу Service.
| Характеристика | Application Context | Activity Context |
|---|---|---|
| Время жизни | Все приложение | Только жизнь Activity |
| Доступ к UI | Нет | Да |
| Theme | Без темы | С учетом темы Activity |
| Диалоги | Нельзя показывать | Можно показывать |
// Плохо: Activity не сможет быть собрана GC
class Singleton {
companion object {
var context: Context? = null
}
}
// Лучше:
class Singleton(val appContext: Context) {
init {
this.appContext = appContext.applicationContext
}
}
val appName = context.getString(R.string.app_name)
val intent = Intent(context, MainActivity::class.java)
context.startActivity(intent)
val prefs = context.getSharedPreferences("my_prefs", Context.MODE_PRIVATE)
val vibrator = context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator