getContext()
, getApplicationContext()
,getBaseContext()
和this
获取上下文的方法之间的本质区别是什么Android
?
我知道这可能是一个非常微不足道或非常广泛的问题,但我认为我们中的许多人对这些概念并不完全清楚,我认为这对社区会有很大帮助。此外,如果可能的话,他们可以给出一些使用每个案例的基本示例,以提高他们的理解。
PS:this
我的意思是在一个Activity
.
getContext()
, getApplicationContext()
,getBaseContext()
和this
获取上下文的方法之间的本质区别是什么Android
?
我知道这可能是一个非常微不足道或非常广泛的问题,但我认为我们中的许多人对这些概念并不完全清楚,我认为这对社区会有很大帮助。此外,如果可能的话,他们可以给出一些使用每个案例的基本示例,以提高他们的理解。
PS:this
我的意思是在一个Activity
.
getContext() 返回视图执行的上下文,通常是Activity,通过这个上下文可以访问当前的主题、资源等。
getApplicationContext() 返回当前进程的单个全局应用程序对象的上下文。使用此上下文可确保您拥有与应用程序生命周期相关的上下文。可以说是最“轻”的语境。
getBaseContext():由构造函数或 setBaseContext 设置的基本上下文。要谈论这个上下文,就必须谈谈ContextWrapper ,它是一个类,通过它可以在另一个上下文中访问一个上下文。ContextWrapper引用的上下文是通过getBaseContext()获得的。通过该方法获取上下文与Activity的获取上下文有关。
This:此引用可以在 Activity 中使用,因为 Activity 继承自
Context
并且是对 Activity 上下文的引用:因为您的类不从
Activity
,AppCompactActivity
甚至从Service
(用于this
获取上下文的地方)扩展,如果您的类不扩展任何这些,您必须使用构造函数向您的类发送上下文。例子:
getApplicationContext()
用于获取与应用关联的 Context,因此在应用的整个生命周期中始终是相同的。另一方面,getBaseContext()
它与父activity相关联,不一定相同,因为它与它的生命周期相关,所以它可以被销毁。总而言之,您只能拥有 2 种类型的 Context,一种基于应用程序,一种基于 Activity,因此根据要求您必须使用其中一种。
当您
this
在 Activity 中执行操作时,您实际上正在做的是获取 Activity 的对象Activity
,并且从这个 Android 中它已经获取了上下文。一种检查方法如下:getLayoutInflater()
让我们尝试在您的活动中调用该方法:你会看到 with
context.getLayoutInflater();
给你一个错误,因为这个方法需要用一个对象Activity
而不是一个Context
.