对Application的伴随对象中的应用程序上下文和资源的静态引用

时间:2017-10-27 15:12:51

标签: android kotlin-android-extensions

我已经阅读了很多关于这个问题的文章和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中保留对应用程序上下文资源的静态引用。有了这个,我能够(作为例子):

  • 在使用Ion进行API调用的util App.context中调用object
  • 在使用资源字符串的util App.resources中调用object

与每次调用对象的方法时传递Context和/或Resources相比,这是一种方便。 这是一个安全的解决方案吗?如果没有,有更好的选择吗?

0 个答案:

没有答案