В Kotlin этого можно добиться, создав класс, расширяющий Application, и сохранив контекст приложения в объекте-компаньоне.
Обычно это будет выглядеть примерно так:
class App : Application() {
override fun onCreate() {
super.onCreate()
instance = this
}
companion object {
private var instance: App? = null
val context: Context?
get() = instance?.applicationContext
}
}
И вы можете получить доступ к контексту в любом месте через App.context
. Что касается ваших опасений по поводу сохранения статического контекста, то, если вы сохраняете контекст действия или фрагмента, то вы рискуете создать утечки памяти, но, поскольку мы хранимконтекст приложения, который связан с жизненным циклом всего приложения, не будет проблем с утечками памяти.
Вы можете столкнуться с проблемами, если хотите написать тестируемый код, который зависит от статического контекста,в этом случае я бы порекомендовал вам передать контекст в функцию, а не обращаться к нему напрямую.