如果我从应用程序类静态地访问我的资源,是否会有任何内存泄漏



如果我从应用程序类静态地访问资源,则会有任何内存泄漏:

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
  }
}

相关内容

最新更新