在Android编程中,Context类到底是什么?它用于什么?
我在开发者网站上读过这篇文章,但我无法清楚地理解它。
在Android编程中,Context类到底是什么?它用于什么?
我在开发者网站上读过这篇文章,但我无法清楚地理解它。
当前回答
上下文是有关应用程序环境的全局信息的接口。这是一个抽象类,其实现由Android系统提供。
上下文允许访问特定于应用程序的资源和类,以及调用应用程序级操作,如启动活动、广播和接收意图等。
以下是示例
public class MyActivity extends Activity {
public void Testing() {
Context actContext = this; /*returns the Activity Context since Activity extends Context.*/
Context appContext = getApplicationContext(); /*returns the context of the single, global Application object of the current process. */
Button BtnShowAct1 = (Button) findViewById(R.id.btnGoToAct1);
Context BtnContext = BtnShowAct1.getContext(); /*returns the context of the View. */
有关详细信息,请访问http://developer.android.com/reference/android/content/Context.html
其他回答
语境到底是什么?
根据Android参考文档,它是一个表示各种环境数据的实体。它提供对本地文件、数据库、与环境相关的类加载器、服务(包括系统级服务)等的访问。在这本书中,以及在您使用Android进行的日常编码中,您将看到上下文频繁传递。
摘自《实践中的Android》一书,第60页。
几个Android API需要Context作为参数
如果您查看各种Android API注意,其中许多都将android.content.Context对象作为参数您还将看到“活动”或“服务”通常用作上下文这是因为这两个类都是从Context扩展的。
只是把它放在那里给新手;
因此,首先了解单词上下文:
在英语库中。这意味着:
“构成事件、语句或这是一个可以充分理解和评估的概念。"“紧接在和之前的书面或口头的部分跟随一个单词或一段话,并阐明其含义。"
现在对编程世界有同样的理解:
应用程序/对象当前状态的上下文。它让新创建的对象了解发生了什么。通常,您调用它来获取有关程序的另一部分(活动、包/应用程序)的信息
您可以通过调用getApplicationContext()、getContext()和getBaseContext()或this(在活动类中)来获取上下文。
要在应用程序中获取上下文Anywhere,请使用以下代码:
在android应用程序中创建新类AppContext
public class AppContext extends Application {
private static Context context;
public void onCreate(){
super.onCreate();
AppContext.context = getApplicationContext();
}
public static Context getAppContext() {
return AppContext.context;
}
}
现在,每当您希望在非活动类中使用应用程序上下文时,都可以调用此方法,这样您就有了应用程序上下文。
希望这有帮助;)
上下文的定义
上下文表示环境数据它提供了对数据库等内容的访问
更简单的术语(示例1)
假设Person-X是一家初创软件公司的首席执行官。公司有一位首席架构师,这位首席架构师在公司内完成所有涉及数据库、UI等的工作等现在,首席执行官雇佣了一名新的开发人员。是建筑师告诉新聘人员的责任基于新人的技能数据库或UI等工作。
更简单的术语(示例2)
这就像访问应用程序资源的android活动。这与你去酒店时想吃早餐、午餐类似&在合适的时间吃饭,对吧?在逗留期间,你还喜欢其他很多东西。你是怎么得到这些东西的?你让客房服务人员为你带来这些东西。这里,客房服务人员是上下文,因为您是单一活动和酒店将成为您的应用程序,最后是早餐、午餐&晚餐必须是资源。
涉及上下文的内容包括:
正在加载资源。启动新活动。创建视图。获取系统服务。
上下文是Activity、Service、Application等的基类
描述这一点的另一种方式是:将上下文视为电视的远程&电视中的频道是资源、服务、使用意图等--这里,远程充当访问前台所有不同资源的访问权限。
因此,Remote可以访问资源、服务、使用意图等渠道。。。。同样地访问远程的人自然可以访问所有的东西,如资源、服务、使用意图等
获取上下文的不同方法
getApplicationContext()获取上下文()getBaseContext()或者这个(在活动课上)
例子:
TextView tv = new TextView(this);
关键字this指的是当前活动的上下文。
简单地说,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方法从其对象,并将其传递给新对象的构造函数。用这个方法,上下文在任何地方都可用,但它只显示为构造函数中的显式参数。