Android:getApplicationContext().getContentResolver()与getContentResolver()之间的区别

Android:getApplicationContext().getContentResolver()与getContentResolver()之间的区别,android,android-context,Android,Android Context,这个问题的要点是澄清何时需要使用“this”或getApplicationContext()或其他形式的获取上下文。前 Settings.System.putInt(getContentResolver(), Settings.System .SCREEN_BRIGHTNESS_MODE, 0); vs 在Android系统中,上下文可以是活动、服务或应用程序。调用context.getApplicationContext()时从任何上下文中,您

这个问题的要点是澄清何时需要使用“this”或getApplicationContext()或其他形式的获取上下文。前

Settings.System.putInt(getContentResolver(), Settings.System
                        .SCREEN_BRIGHTNESS_MODE, 0);
vs


在Android系统中,上下文可以是活动、服务或应用程序。调用
context.getApplicationContext()时从任何上下文中,您都可以获得在清单中定义的应用程序类的上下文。由于应用程序类维护应用程序的全局状态,因此应用程序上下文在应用程序运行时(在前台或后台)随时可用

需要使用“this”或getApplicationContext()时

当您需要在活动或服务中绑定并运行的操作的上下文时,最好使用
this
。另一方面,当您执行更特定于应用程序且不绑定或依赖于调用活动/服务的操作时,可以使用
getApplicationContext()
在您的例子中,您使用上下文只是为了获得一些上下文资源,所以在这两种情况下都是一样的。当您将上下文传递给另一个类时,您知道该类将不时使用该上下文。

在Android universe中,“上下文是什么”是最困难的问题之一

上下文定义了访问系统资源、检索应用程序静态资产、检查权限、执行UI操作等方法。本质上,
Context
是生产中上帝对象反模式的一个例子

当谈到我们应该使用哪种类型的
上下文时,它变得非常复杂,因为
上下文
子类的层次结构树除了作为上帝对象外,还粗暴地违反了Liskov替换原则

尝试总结
上下文
类在不同情况下的适用性

为了完整起见,让我从那篇文章中复制主表:

  • 应用程序可以从此处启动活动,但需要创建新任务。这可能适合特定的用例,但可能会在应用程序中创建非标准的后堆栈行为,通常不推荐或认为是良好做法
  • 这是合法的,但将使用运行系统的默认主题,而不是应用程序中定义的主题
  • 在Android 4.2及更高版本上,如果接收器为空(用于获取粘性广播的当前值),则允许此选项
  • -


    至于
    getContentResolver()
    调用-
    活动。getContentResolver()
    应用程序。getContentResolver()
    是等效的(
    活动
    将此调用委托给引擎盖下的
    应用程序
    ).

    可能重复:您的答案既没有足够详细地说明上下文的功能性(请参阅@phil3992发布的链接),也没有说明
    getContentResolver()
    call的具体内容功能是相同的。这三个上下文(应用程序、活动、服务)都提供了相同的功能,因为它们继承了相同的类。而且问题不是问什么内容解析器
    getContentResolver
    将返回,因为显然它们将返回相同的内容。问题是要知道什么时候该用哪个,我希望你说的是真的。不幸的是,Android的上下文继承树严重违反了Liskov替换原则。。。
    Settings.System.putInt(getApplicationContext().getContentResolver(),
                            Settings.System.SCREEN_BRIGHTNESS_MODE, 0);
    
    +----------------------------+-------------+----------+---------+-----------------+-------------------+
    |                            | 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               |
    +----------------------------+-------------+----------+---------+-----------------+-------------------+