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

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


当前回答

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

Android上下文包括:

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

其他回答

如果您查看的评论https://stackoverflow.com/a/16301475/1772898,你会看到ulf edholm的评论

嗯,对我来说,这一切听起来就像我们老前辈过去所说的全局变量,当对象定向进入场景时,这是非常令人反感的

他是对的。上下文是全局变量的替代。

为了简单起见,我们可以说:全局变量≈上下文

上下文相对于全局变量的好处是,全局变量使得不可能在同一进程中创建同一系统的两个独立实例,而上下文允许系统的多个实例在单个进程中共存,每个实例都有自己的上下文。

请查看John Ousterhout的《软件设计哲学》,7.5传递变量。

全局变量使得无法创建两个独立变量同一进程中同一系统的实例,因为访问全局变量将发生冲突。...我最常用的解决方案是引入上下文对象,如图7.2(d).上下文存储应用程序的所有全局状态(否则将是传递变量或全局变量变量)。大多数应用程序的全局变量中都有多个变量状态,表示配置选项、共享子系统和性能计数器。每个有一个上下文对象系统的实例。上下文允许系统在单个进程中共存,每个进程都有自己的上下文。

稍后在评论部分,您将看到比约恩的另一条评论

如果你只是grep一个代码库,你会看到数百个不同的getContext,getBaseContext,getBlaBlaContext。

他也是对的。

为了减少必须了解上下文的方法的数量,在许多主要对象中都引用了对上下文的引用。这就是为什么会看到getContext、getBaseContext、getBlaBlaContext。。在这么多地方。

参考资料:John Ousterhout的《软件设计哲学》,7.5传递变量。

不幸的是,许多地方可能需要上下文,因此它可能会成为传递变量。为了减少必须知道的方法的数量,对上下文的引用可以保存在系统的大多数主要对象中。在以下示例中图7.2(d),包含m3的类存储对上下文作为其对象中的实例变量。当新对象create方法从其对象,并将其传递给新对象的构造函数。用这个方法,上下文在任何地方都可用,但它只显示为构造函数中的显式参数。

上下文是系统的句柄;它提供诸如解析资源、访问数据库和首选项等服务。Android应用程序有活动。上下文就像应用程序当前运行的环境的句柄。活动对象继承上下文对象。

有关更多信息,请参阅Android Studio的Android开发简介-教程。

将Context视为具有不同资源的框:字符串、颜色和字体。如果您需要资源,请转到此框。旋转屏幕时,此框会发生变化,因为方向会变为横向。

android.content.Context类的实例提供到执行应用程序的android系统的连接。例如,您可以通过上下文检查当前设备显示的大小。

它还允许访问项目的资源。它是有关应用程序环境的全局信息的接口。

Context类还提供对Android服务的访问,例如报警管理器以触发基于时间的事件。

活动和服务扩展了Context类。因此,它们可以直接用于访问上下文。

上下文表示获取环境数据的句柄。上下文类本身声明为抽象类,其实现由android OS提供。上下文就像电视的远程&电视中的频道是资源、服务等。

你能用它做什么?

正在加载资源。启动新活动。创建视图。正在获取系统服务。

获取上下文的方法:

getApplicationContext()获取上下文()getBaseContext()