Context详解
来源:互联网 发布:多益 知乎 编辑:程序博客网 时间:2024/06/01 10:19
Context概念
Context,中文直译为“上下文”,官方的声明如下:
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
可以看出,Context是Android应用程序的环境,它声明了一系列的接口,主要用于获取资源(Assets、Resources等)、启动四大组件、检查权限和获取服务等。
Context是个抽象类,Application、Activity、Service等都是它的子类。具体可以看Context相关类的继承关系:
图是网上找的,有点错误。
可能只看这些还是不能理解Context的概念,接下来我们打个比方。
- 假设Context代表人类,人类也是一个抽象的概念,人类会进食、会看、会说、会繁衍后代、会死亡等各种能力就相当于Context中的获取资源、启动四大组件、获取服务等等。
- ContextImpl代表男人和女人,男人和女人都有上面的那些能力而且实现上面能力会有所不同,只不过安卓中实现Context能力的方式都一样所以只要一种ContextImpl就够了。
- ContextWrapper代表人类的群体,比方说中国人,让你请一个中国人吃饭,肯定是请你的某个好友(假设是中国人),而你的好友就相当于ContextWrapper中的mBase。让你请一个中国人吃饭实际上是请你的好友吃饭,调用ContextWrapper的方法实际上是调用mBase的方法。ContextWrapper虽然继承了Context,但是他自己不实现,而是由内部的mBase代劳。
- ContextThemeWrapper相当于有特殊技能的中国人,对于ContextThemeWrapper而言,特殊技能就是有主题(Theme)。
- Activity、Service、Application就相当于更具体的个人,只不过Activity是个明星,需要抛头露面,所以需要界面来展示,而且能量最大,能做的事情最多。而Service和Application是个默默无闻的地下党,不需要什么界面,只要能工作就行,Application又比较特殊,他是个地下党头目,一个组织只有一个头目,只不过他是幕后老板,所以抛头露面的事他不做,而且他还和其他人关系密切。
比喻可能不是很恰当,这里主要是说明Context与他们的关系。
Context的应用场景
大家注意看到有一些NO上添加了一些数字,其实这些从能力上来说是YES,但是为什么说是NO呢?下面一个一个解释:
数字1:启动Activity在这些类中是可以的,但是需要创建一个新的task。一般情况不推荐。
数字2:在这些类中去layout inflate是合法的,但是会使用系统默认的主题样式,如果你自定义了某些样式可能不会被使用。
数字3:在receiver为null时允许,在4.2或以上的版本中,用于获取黏性广播的当前值。(可以无视)
注:ContentProvider、BroadcastReceiver之所以在上述表格中,是因为在其内部方法中都有一个context用于使用。
0 0
- Context 详解
- Context详解
- Context详解
- context详解
- context详解
- context详解
- Context 详解
- Context详解
- context详解
- Context详解
- Context详解
- context 详解
- Context——Context详解
- Android中的Context详解
- Android中的Context详解
- Tomcat - Context Resource详解
- java中Context详解
- Android中的Context详解
- Java:String和Date、Timestamp之间的转换
- c++常用词
- 二叉树的前序、中序、后序遍历(递归与非递归)
- sql练习
- 开发文档:移动应用支持微信小程序类型分享(Android应用)
- Context详解
- 后台ui框架------sitemesh
- spark的各种sparksubmit
- qt编译错误
- 善用设计模式(三)享元模式
- 合并两个排序链表
- Java基础学习笔记--子父类中的函数和成员变量
- 常见的医学图像成像及存储格式解析
- JS实现继承的几种方式