这个问题的要点是要弄清楚什么时候有必要使用这个'或getApplicationContext()或获取Context的其他形式。实施例
Settings.System.putInt(getContentResolver(), Settings.System
.SCREEN_BRIGHTNESS_MODE, 0);
VS
Settings.System.putInt(getApplicationContext().getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS_MODE, 0);
这两种功能有何不同?
答案 0 :(得分:1)
“上下文是什么”这个问题是Android领域最难的问题之一。
Context定义了访问系统资源,检索应用程序的静态资产,检查权限,执行UI操作等的方法。从本质上讲,Context
是生产中神对象反模式的一个例子。
当谈到我们应该使用哪种Context
时,它变得非常复杂,因为除了作为God Object之外,Context
子类的层次结构树残忍地违反了Liskov替换原则。
This blog post尝试在不同情况下总结Context
类的适用性。
让我从该帖子中复制主表以确保完整性:
+----------------------------+-------------+----------+---------+-----------------+-------------------+ | | Application | Activity | Service | ContentProvider | BroadcastReceiver | +----------------------------+-------------+----------+---------+-----------------+-------------------+ | Show a Dialog | NO | YES | NO | NO | NO | | Start an Activity | NO¹ | YES | NO¹ | NO¹ | NO¹ | | Layout Inflation | NO² | YES | NO² | NO² | NO² | | Start a Service | YES | YES | YES | YES | YES | | Bind to a Service | YES | YES | YES | YES | NO | | Send a Broadcast | YES | YES | YES | YES | YES | | Register BroadcastReceiver | YES | YES | YES | YES | NO³ | | Load Resource Values | YES | YES | YES | YES | YES | +----------------------------+-------------+----------+---------+-----------------+-------------------+
- 应用程序可以从此处启动活动,但需要创建新任务。这可能适合特定的用例,但可以在您的应用程序中创建非标准的堆栈行为,通常不建议或被视为良好实践。
- 这是合法的,但通货膨胀将使用您运行的系统的默认主题,而不是您的应用程序中定义的内容。
- 如果接收方为空,则允许在Android 4.2及更高版本上用于获取粘性广播的当前值。
醇>
至于getContentResolver()
来电 - activity.getContentResolver()
和application.getContentResolver()
是等效的(Activity
将此次来电委托给Application
。
答案 1 :(得分:0)
在Android系统中,上下文可以是活动,服务或应用程序。当您从任何上下文中调用context.getApplicationContext();
时,您将获得在Manifest中定义的Application类的上下文。由于Application类维护应用程序的全局状态,因此应用程序上下文在应用程序运行时(在前台或后台)可用。
当需要使用'this'或getApplicationContext()
时
当您需要绑定并在您的活动或服务中运行的操作的上下文时,使用this
总是好的。另一方面,当您执行更具特定于应用程序且未受约束或依赖于调用的Activity / Service的内容时,您可以使用getApplicationContext();
在您的情况下,您只是使用上下文获取一些上下文资源,因此在两种情况下都是相同的。当您将上下文传递给另一个知道该类将不时使用上下文时,会出现差异。