在安卓库中获取上下文

我正在编写一个Android应用程序,该应用程序具有封装在内部库中的某些功能。但是,要使此功能正常工作,库需要应用程序上下文的实例。为库提供此上下文的最佳方式是什么?我看到一些选项,没有一个吸引人:

  • 让我的库类扩展 ,并调用ApplicationgetApplicationContext()
    • 通常不鼓励这样做
  • 让我的库类各自实现单例模式,并让每个调用方在每次获得对单例的引用时都传入 。Context
    • 这要求每个调用方在使用库之前检索应用程序上下文,并且还要求调用方对库的实例进行调用,而不是对库类上定义的静态方法进行调用(因此进一步需要保留对此实例的引用)。

答案 1

为库提供此上下文的最佳方式是什么?

将 a 传递到需要 .这就是Android SDK在某些地方所做的。ContextContext

或者,更改库以公开对象,而不是静态方法,并让对象保存 (提供给创建实例的构造函数或工厂方法) 的实例。Context

让我的库类扩展 Application,并调用 getApplicationContext()

如果您可以调用 ,则只需执行此操作,而无需子类 。getApplicationContext()ContextApplication


答案 2

这是我找到的一个解决方案,我还没有测试过,但Firebase显然使用它来避免创建初始化方法:

“应用程序启动时发生的情况是,它注册系统中的所有内容提供者(调用 onCreate)。这意味着此时尚未启动任何活动,但我们可以访问(应用程序)上下文,我们可以在其中使用此上下文初始化我们的库”

从本质上讲,您正在利用空内容提供者的 onCreate 作为 init。它很笨拙,但无缝衔接。

https://medium.com/@andretietz/auto-initialize-your-android-library-2349daf06920


推荐