Android中,Context,啥是Context

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android中,Context,啥是Context相关的知识,希望对你有一定的参考价值。

context其实就是句柄,只不过不像windows一样,每个资源都可以是一个句柄,android的一个句柄包含了很多全局信息,比如说Activity就是一个句柄。

官方文档的解释是:Context提供了关于应用环境全局信息的接口。它是一个抽象类,它的执行被Android系统所提供。它允许获取以应用为特征的资源和类型。同时启动应用级的操作,如启动Activity,broadcasting和接收intents。
参考技术A Context可能是Android应用中最常用的元素,而它也可能是最容易误用的。
Context对象是如此常见和传递使用,它可能会很容易产生并不是你预期的情形。加载资源、启动一个新的Activity、获取系统服务、获取内部文件路径以及创建view(其实还远不止这些)统统都需要Context对象来完成。我(原文作者)想做的只是给大家提供一些Context是如何工作的见解,以及让大家在应用中更有效的使用Context的技巧。

Context的类型
并不是所有的context实例都是等价的。根据Android应用的组件不同,你访问的context推向有些细微的差别。

Application - 是一个运行在你的应用进程中的单例。在Activity或者Service中,它可以通过getApplication()函数获得,或者人和继承于context的对象中,通过getApplicationContext()方法获得。不管你是通过何种方法在哪里获得的,在一个进程内,你总是获得到同一个实例。

Activity/Service - 继承于ContextWrapper,它实现了与context同样API,但是代理这些方法调用到内部隐藏的Context实例,即我们所知道的基础context。任何时候当系统创建一个新的Activity或者Service实例的时候,它也创建一个新的ContextImpl实例来做所有的繁重的工作。每一个Activity和Service以及其对应的基础context,对每个实例来说都是唯一的。

BroadcastReciver - 它本身不是context,也没有context在它里面,但是每当一个新的广播到达的时候,框架都传递一个context对象到onReceive()。这个context是一个ReceiverRestrictedContext实例,它有两个主要函数被禁掉:registerReceiver()和bindService()。这两个函数在BroadcastReceiver.onReceive()不允许调用。每次Receiver处理一个广播,传递进来的context都是一个新的实例。

ContentProvider - 它本身也不是一个Context,但是它可以通过getContext()函数给你一个Context对象。如果ContentProvider是在调用者的的本地(例如,在同一个应用进程),getContext()将返回的是Application单例。然而,如果调用这和ContentProvider在不同的进程的时候,它将返回一个新创建的实例代表这个Provider所运行的包。
参考技术B Context,中文直译为“上下文”,SDK中对其说明如下:
Interface to global information about an application environment. This is an abstract class whose implementation
is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls
for application-level operations such as launching activities, broadcasting and receiving intents, etc

从上可知一下三点,即:
1、它描述的是一个应用程序环境的信息,即上下文。
2、该类是一个抽象(abstract class)类,Android提供了该抽象类的具体实现类(后面我们会讲到是ContextIml类)。
3、通过它我们可以获取应用程序的资源和类,也包括一些应用级别操作,例如:启动一个Activity,发送广播,接受Intent
信息 等。。

于是,我们可以利用该Context对象去构建应用级别操作(application-level operations) 。

一、Context相关类的继承关系

其实呢,在activity中,context就是当前这个activity对象
在Service中,context就是当前这个Service对象
整个应用程序它也是一个Context,但是通过 getApplicationContext 来获取的
这个context是你在AndroidManifest.xml application 节点中定义的类
参考技术C

Context意味着一个场景,简单地说就是一个抽象类,可以从源码实现去理解。

在Android开发中,啥是SDK和AVDManager?

参考技术A 在AndroidSDK里新增和更新的组件是快速和容易的。要添加或更新个人SDK组件,需要使用的AndroidSDK和AVD管理(包括在SDK工具)。

以上是关于Android中,Context,啥是Context的主要内容,如果未能解决你的问题,请参考以下文章

对于android里面的content不理解,查找说这个是上下文,但是我还是没有这个概念,啥是上下文求大神讲解

启动服务器 SEVERE: Error configuring application listener of class org.springframework.web.context.Contex

Android 如何实现竖排文字显示

android怎么保证notification不重复

伴随对象 - Android 是不是希望将它们注册为活动 (?)

如何使用MAT分析Android应用内存泄露