Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如果从应用程序类静态访问资源,是否会出现内存泄漏?_Android_Kotlin - Fatal编程技术网

Android 如果从应用程序类静态访问资源,是否会出现内存泄漏?

Android 如果从应用程序类静态访问资源,是否会出现内存泄漏?,android,kotlin,Android,Kotlin,如果从应用程序类静态访问资源,是否会出现内存泄漏,如下所示: class App : Application() { companion object { fun getResources(): Resources { return this.getResources() } } } 我在寻找一种直接从视图模型访问资源而不传递上下文对象的方法,我只需要使用AndroidViewModel,而不是Androi

如果从应用程序类静态访问资源,是否会出现内存泄漏,如下所示:

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

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

谢谢大家

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

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


您不能像这样使用companion对象来访问
应用程序
类。在您的示例中,
this
引用companion对象本身,因此您正在创建无休止的递归调用:
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
  }
}

即使添加@JvmStatic注释,字节码中也会有一个真正的静态字段,这是真的。但是你用它吗?我不太清楚你的问题是什么意思。我的目标是直接从我的视图模型访问我的字符串资源,而不传递上下文对象…有什么想法吗?我刚刚了解到,这是一个艰难的过程。我真的不能说我理解了无休止循环的原因吗?