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

我读过一些文章和关于这个问题(主要是上下文而不是资源)的stackoverflow帖子。 很多人都说这是可以的,因为Application类和应用程序上下文应该在应用程序的整个生命周期中一直存在,但是有些人仍然不愿意做这种可能的未知的可能性(这使我很怀疑 – 因此这篇文章)。

另一方面,将Context传递给每个对象的函数是相当艰巨的。 在Java中,解决这个问题的一个办法是做一些类似UtilClass.getInstance(context)事情,但是你不能用Kotlin对象来做这件事,而且我也不太确定用参数实现Kotlin Singletons 。

所以,我有以下代码:

 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被调用的时候,我保持一个静态引用到应用程序上下文资源 。 有了这个,我能够(例如):

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

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