在Android编程中,Context类到底是什么?它用于什么?

我在开发者网站上读过这篇文章,但我无法清楚地理解它。


当前回答

了解android环境的简单示例:

每个老板都有一个助手来照顾,来完成所有不那么重要和耗时的任务。如果需要一份文件或一杯咖啡,一名助手就在路上。一些老板几乎不知道办公室里发生了什么,所以他们也会询问助手。他们自己做一些工作,但在大多数其他事情上,他们需要助手的帮助。

在这种情况下,

Boss–是Android应用程序

助手–是一个上下文

文件/咖啡杯–是资源

当我们需要获取有关应用程序的不同部分(如活动、应用程序等)的信息时,我们通常会调用上下文。

涉及上下文的某些操作(需要助手的操作):

加载公共资源创建动态视图显示Toast消息启动活动等。

获取上下文的不同方式:

getContext()

getBaseContext()

getApplicationContext()

this

其他回答

如果您想将Context与Android中其他熟悉的类连接,请记住以下结构:

Context<ContextWrapper<应用程序Context<ContextWrapper<ContextThemeWrapper<活动Context<ContextWrapper<ContextThemeWrapper<活动<列表活动Context<ContextWrapper<ServiceContext<ContextWrapper<Service<IntentService

所以,所有这些类都是以自己的方式存在的上下文。如果愿意,可以将Service和ListActivity转换为Context。但如果仔细观察,一些类也会继承主题。在活动或片段中,您希望将主题化应用于视图,但不关心它,例如Service类。

我在这里解释上下文的差异。

老板助理类比

在深入研究Context的技术性之前,让我们先做一个小类比

每个老板都有一个助手或一个办事少的人(跑腿)对他来说,重要而耗时的事情。例如,如果需要一份文件或咖啡,那么助手就可以跑了。老板不会知道后台正在发生什么,但文件或任务将生产所以在这里Boss-Android应用程序助手-上下文文件或咖啡杯-资源

Android开发者官方网站对Context的描述

上下文是应用程序相关资源的访问点

让我们看看这些资源或任务

启动活动。获取文件系统上特定于应用程序的缓存目录的绝对路径。确定系统中运行的特定进程和用户ID是否允许给定权限。检查是否已授予您特定权限。

等等因此,如果一个Android应用程序想要启动一个活动,它将直接转到Context(访问点),Context类将资源返回给他(在本例中为Intent)。

与任何其他类一样,Context类具有字段和方法。您可以在官方文档中探索更多关于Context的内容,它几乎涵盖了所有内容、可用的方法、字段,甚至包括如何将字段与方法一起使用。

将其视为虚拟机孤立了应用程序或服务运行的进程。孤立的环境可以访问大量底层系统信息和某些允许的资源。您需要该上下文来获得这些服务。

简单地说,Androids环境是一个混乱,除非你不再担心,否则你不会喜欢它。

Android上下文包括:

上帝反对。当你开始为Android开发时,你想在所有应用程序中传递的东西,但当你稍微接近编程、测试和Android本身时,就会避免这样做。不明确的依赖关系。内存泄漏的常见来源。用于测试的PITA。Android系统用于分配权限、资源、偏好、服务、广播、样式、显示对话框和膨胀布局的实际上下文。对于一些单独的事情,您需要不同的Context实例(显然,您不能显示来自应用程序或服务上下文的对话框;来自应用程序和活动上下文的布局可能不同)。

上下文是指不同时间段内的组件(或应用程序)。如果我确实在下午1点到2点之间吃了那么多食物,那么我在这段时间内使用的所有方法(或资源)都将被用来访问。内容是特定时间的组件(应用程序)。应用程序组件的上下文根据组件或应用程序的底层生命周期不断变化。例如,在Activity的onCreate()内,

getBaseContext()--提供由Activity的构造函数设置(创建)的Activity的上下文。getApplicationContext()--在创建应用程序期间提供Context设置(已创建)。

注意:<application>包含所有Android组件。

<application>
    <activity> .. </activity> 

    <service>  .. </service>

    <receiver> .. </receiver>

    <provider> .. </provider>
</application> 

这意味着,当您从任何组件内部调用getApplicationContext()时,您正在调用整个应用程序的公共上下文。

系统根据组件的生命周期不断修改上下文。