关于context
来源:互联网 发布:分级聚类算法 编辑:程序博客网 时间:2024/04/28 04:27
Context相信所有的Android开发人员基本上每天都在接触,因为它太常见了。但是这并不代表Context没有什么东西好讲的,实际上Context有太多小的细节并不被大家所关注,那么今天我们就来学习一下那些你所不知道的细节.
Context类型
我们知道,Android应用都是使用Java语言来编写的,那么大家可以思考一下,一个Android程序和一个Java程序,他们最大的区别在哪里?划分界限又是什么呢?其实简单点分析,Android程序不像Java程序一样,随便创建一个类,写个main()方法就能跑了,而是要有一个完整的Android工程环境,在这个环境下,我们有像Activity、Service、BroadcastReceiver等系统组件,而这些组件并不是像一个普通的Java对象new一下就能创建实例的了,而是要有它们各自的上下文环境,也就是我们这里讨论的Context。可以这样讲,Context是维持Android程序中各组件能够正常工作的一个核心功能类。
Context的继承结构还是稍微有点复杂的,可以看到,直系子类有两个,一个是ContextWrapper,一个是ContextImpl。那么从名字上就可以看出,ContextWrapper是上下文功能的封装类,而ContextImpl则是上下文功能的实现类。而ContextWrapper又有三个直接的子类,ContextThemeWrapper、Service和Application。其中,ContextThemeWrapper是一个带主题的封装类,而它有一个直接子类就是Activity。
那么在这里我们至少看到了几个所比较熟悉的面孔,Activity、Service、还有Application。由此,其实我们就已经可以得出结论了,Context一共有三种类型,分别是Application、Activity和Service。这三个类虽然分别各种承担着不同的作用,但它们都属于Context的一种,而它们具体Context的功能则是由ContextImpl类去实现的。
那么Context到底可以实现哪些功能呢?这个就实在是太多了,弹出Toast、启动Activity、启动Service、发送广播、操作数据库等等等等都需要用到Context。由于Context的具体能力是由ContextImpl类去实现的,因此在绝大多数场景下,Activity、Service和Application这三种类型的Context都是可以通用的。不过有几种场景比较特殊,比如启动Activity,还有弹出Dialog。出于安全原因的考虑,Android是不允许Activity或Dialog凭空出现的,一个Activity的启动必须要建立在另一个Activity的基础之上,也就是以此形成的返回栈。而Dialog则必须在一个Activity上面弹出(除非是System Alert类型的Dialog),因此在这种场景下,我们只能使用Activity类型的Context,否则将会出错。
Context数量
那么一个应用程序中到底有多少个Context呢?其实根据上面的Context类型我们就已经可以得出答案了。Context一共有Application、Activity和Service三种类型,因此一个应用程序中Context数量的计算公式就可以这样写:
1. Context数量 = Activity数量 + Service数量 + 1
上面的1代表着Application的数量,因为一个应用程序中可以有多个Activity和多个Service,但是只能有一个Application。
- 关于Context
- 关于Context
- 关于context
- 关于上下文(Context)
- 关于PDP context
- 关于android的 context
- 关于Android中的Context
- 关于Android中的context
- 关于Context跟this
- 关于context和getapplicationcontext
- 关于<context:property-placeholder>
- 关于Context(一)
- 关于Context的疑问
- 关于Context的研究
- 关于Context的子类
- 关于上下文Context
- 关于 context manager
- 关于<context:annotation-config/>
- RATIO_TO_REPORT使用方法
- MySQL 5.7安装完成后默认密码修改
- 遍历Map的四种方法
- 进程间的通信方式
- Android studio 导入jar包,导入arr 库 ---- 详细操作
- 关于context
- js如何处理前台传递过来的Map
- java对象的控制访问权限
- LDD高级字符驱动程序操作-异步通知
- bzoj1968 COMMON约数研究
- 必知知识
- 数据库Oracle与Mysql语法对比:组函数的嵌套使用
- Spring MVC 01 - Spring MVC框架介绍
- 自制Lex-词法分析器生成器(C++)