如果我从My Application类静态访问我的资源,是否会有任何内存泄漏?

时间:2018-03-28 18:41:25

标签: android kotlin

如果我从My Application类静态访问资源,那么是否存在任何内存泄漏:

class App : Application() {    
    companion object {
        fun getResources(): Resources {
            return this.getResources()
        }
    }   
}

我一直在寻找一种直接从我的视图模型访问我的资源的方法而不传递上下文对象我只需要使用AndroidViewModel而不是来自android arch组件的ViewModel。

谢谢大家。

2 个答案:

答案 0 :(得分:2)

Companion objects不是静态的,正如文档所述:

  

请注意,即使伴随对象的成员看起来像其他语言中的静态成员,在运行时它们仍然是真实对象的实例成员,并且可以,例如,实现接口

答案 1 :(得分:1)

您无法使用此类伴随对象来访问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
  }
}