Android 中 getContext()、getApplicationContext()、getBaseContext() 和 this 的区别?
什么是 Android 中的 Context?
Context 为我们提供了有关应用程序当前状态的信息。它允许我们与 Android 组件进行交互。它允许我们访问文件和其他资源,例如图片、Activity、Fragment 和 Service。在 Android 中,getContext()、getApplicationContext()、getBaseContext()、this 是检索不同类型 Context 对象的方法。Context 类提供对构建 Android 应用程序所需的多种资源和服务的访问,包括 -
资源 - 通过 Context 访问存储在资源对象中的资源,例如布局、图像和字符串。
系统服务 - 它提供对系统服务的访问,例如电源管理器、通知管理器和位置管理器。
偏好设置 - 偏好设置用于存储和检索键值对中的数据,可以通过 Context 访问。
资产管理器 - 它用于访问与应用程序打包在一起的原始资产文件。
数据库 - 它提供对应用程序使用的数据库的访问。
Context 有哪两种类型?
Context 有两种类型,如下所示 -
Activity Context
Application Context
在 Android 中,“Activity” 和“Application” 都是“Context” 类的子类,它提供对特定于应用程序的资源和类的访问。
这两个上下文的主要区别在于,“Activity” 上下文与“Activity” 的生命周期相关联,而“Application” 上下文与整个应用程序的生命周期相关联。
什么是 Android 中的 getContext()?
getContext() 方法通常与 Activity 和 Fragment 一起使用,以检索视图的上下文。Context 表示应用程序或 Activity 的当前状态,它提供对各种资源的访问,例如字符串、图像等等。getContext() 可以从任何 View 中调用,包括 Button 视图、Text 视图或 Image 视图。
以下是在 Android 应用程序中使用 getContext() 的方法
public class CustomView extends View { public CustomView(Context context) { super(context); } public void displayToastMessage() { // Get the context associated with this view Context context = getContext(); // Use the context to access resources from string.xml file. String message = context.getString(R.string.my_message); // Using the context to display the toast message. Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); } }
什么是 Android 中的 getApplicationContext()?
getApplicationContext() 是 Context 类提供的方法。Context 表示对象的当前状态。getApplicationContext() 可以从任何Activity、Service、BroadcastReceiver 或ContentProvider 中调用以检索全局应用程序 Context。此方法可以在应用程序的多个组件中安全地使用。
以下是在 Android 应用程序中使用 getApplicationContext() 的方法
public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); // Get the global application context Context context = getApplicationContext(); // Use the context to access strings.xml file. String message = context.getString(R.string.my_message); //Using the context to display the toast message on below line. Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); } }
什么是 Android 中的 getBaseContext()?
getBaseContext() 是 ContextWrapper 类提供的方法,它返回当前上下文的基上下文。getBaseContext() 可以从任何Activity、Service、BroadcastReceiver 或ContentProvider 中调用以检索全局应用程序 Context。该方法返回一个 Context 对象,可用于访问应用程序中的资源或服务。
以下是在 Android 应用程序中使用 getBaseContext() 的方法
getBaseContext() 返回的 Context 用作 Activity 或 Service 的基上下文。您可以安全地使用它来访问与 Activity 和 Service 关联的资源或服务。
public class MyApp extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Get the base context of this activity on below line. Context context = getBaseContext(); // Use the context to get data from strnig.xml file String message = context.getString(R.string.my_message); // using the context to display toast message on below line. Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); } }
什么是 Android 中的 this?
this 是 Android 中的一个关键字,用于获取我们当前所在的类的上下文。无需获取上下文,我们可以简单地使用此关键字,它将提供该类的上下文。
以下是在 Android 应用程序中使用 this 的方法
在此示例中,我们不是获取存储在变量中的上下文,而是简单地将其作为 this 传递以显示吐司消息。
public class MyApp extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); } }
getContext()、getApplicationContext()、getBaseContext() 和 this 的区别
getApplicationContext() |
getBaseContext() |
getContext() |
this |
|
---|---|---|---|---|
定义 |
getApplicationContext() 返回应用程序的全局上下文。 |
getBaseContext() 返回整个应用程序的上下文。 |
getContext() 返回当前 Activity 的上下文。 |
this 用于引用当前 Activity。 |
父级 |
应用程序 |
应用程序 |
Activity |
Activity |
在服务外部可访问 |
是 |
是 |
否 |
否 |
在内容提供程序外部可访问 |
是 |
是 |
否 |
否 |
在 Activity 外部可访问 |
是 |
是 |
否 |
否 |
结论
总而言之,getContext() 返回当前 View 或 Fragment 的 Context,getApplicationContext() 返回应用程序的 Context,getBaseContext() 返回 ContextWrapper 的 Context,而 this 返回当前类的上下文。根据您正在工作的上下文选择正确的方法非常重要,因为使用错误的方法会导致内存泄漏或其他问题。