非常有趣的问题。我认为这主要是语义上的意思,也可能是由于历史原因。
尽管在当前的Android Activity和Service实现中,getApplication()
并且getApplicationContext()
返回相同的对象,但不能保证总是如此(例如,在特定的供应商实现中)。
因此,如果要在清单中注册的Application类,则永远不要调用getApplicationContext()
并将其强制转换为应用程序,因为它可能不是应用程序实例(显然是测试框架所经历的)。
为什么getApplicationContext()
首先存在?
getApplication()
仅在Activity类和Service类中可用,而getApplicationContext()
在Context类中声明。
这实际上意味着一件事:当在广播接收器中编写代码时,该代码不是上下文,而是在其onReceive方法中提供了上下文,则只能调用getApplicationContext()
。这也意味着您不能保证可以在BroadcastReceiver中访问您的应用程序。
查看Android代码时,您会看到,将其附加后,活动将接收基本上下文和应用程序,并且这些参数是不同的。getApplicationContext()
将其委托给baseContext.getApplicationContext()
。
还有一件事:文档说,在大多数情况下,您无需将Application子类化:
通常无需继承Application
。在大多数情况下,静态单例可以以更模块化的方式提供相同的功能。如果您的单身人士需要全局上下文(例如,注册广播接收者),则可以为检索单身人士的功能提供一个
在首次构造单身人士时在Context
内部使用Context.getApplicationContext()
的功能。
我知道这不是一个精确的答案,但是仍然可以回答您的问题吗?
Application
在应用程序中显式创建对象,那么这两个方法调用之间是否存在任何区别?