我已经阅读了很多关于这个问题的文章和stackoverflow帖子(主要是上下文而不是资源)。很多人都说没关系,因为Application
类和应用程序上下文在应用程序的整个生命周期中都应该是活着的,但是有些人仍然不鼓励这样看待未知的可能性(这让我怀疑 - 因此这篇文章)。
另一方面,将Context
传递给每个Object的函数非常令人生畏。在Java中,解决这个问题的一种方法是执行UtilClass.getInstance(context)
之类的操作,但是你不能用Kotlin对象做这些事情,而且我对实现Kotlin Singletons with Arguments也不太了解。
所以,我有以下代码:
class App : MultiDexApplication() {
override fun onCreate() {
super.onCreate()
_resources = resources
_context = applicationContext
//..other code
}
companion object {
val resources: Resources
get() = _resources!!
val context: Context
get() = _context!!
private var _resources: Resources? = null
private var _context: Context? = null
}
}
正如您所看到的,当调用onCreate时,我会在companion object
中保留对应用程序上下文和资源的静态引用。有了这个,我能够(作为例子):
App.context
中调用object
。App.resources
中调用object
。与每次调用对象的方法时传递Context
和/或Resources
相比,这是一种方便。 这是一个安全的解决方案吗?如果没有,有更好的选择吗?