如果我从应用程序类静态地访问资源,则会有任何内存泄漏:
class App : Application() {
companion object {
fun getResources(): Resources {
return this.getResources()
}
}
}
我正在寻找一种直接从视图模型访问我的资源的方法,而无需传递上下文对象,我只需要使用AndroidViewModel而不是来自Android Arch组件的ViewModel。
谢谢大家。
伴随对象不是静态的,如文档所描述的:
请注意,即使伴侣对象的成员看起来像其他语言中的静态成员,但在运行时,这些仍然是真实对象的实例成员,例如,可以实现Interfaces
您不能使用这样的伴侣对象来访问App
类。在您的示例中,this
是指伴随对象本身,因此您正在创建无尽的递归调用:this.getResources()
自 this == App.Companion
以来只是呼叫自身。
您无法从其伴随对象访问App
实例,但是您可以从App
类访问您的伴侣实例。这意味着,如果您想在全球范围内访问应用程序上下文,则必须这样做:
class App {
override fun onCreate() {
super.onCreate()
appContext = this
}
companion object {
lateinit var appContext: Context
fun getResources(): Resources = appContext.resources
}
}