一. 引言
在我看项目代码的时候,经常看到一些方法调用的时候都会放一个context对象,或者在Activity中直接放个this.为什么有这么多Context都是干嘛用的?
首先我们知道,Android应用都是使用Java语言来编写的,那么大家可以思考下,一个Android程序和一个java程序他们的最大区别在哪里?Android不想java程序一样,随便创建一个类,写个main()方法就能跑了,而是要有一个完整的Android工程环境,在这个环境下,我们有像Activity,Service,BroadcastReceiver等系统组件,而这些组件并不像一个普通Java对象new下就创建一个实例,而Android需要有各自的上下文环境,也就是说我们这里讨论的Context可以总结为:
Context是维持Android程序中各组件能够正常工作的一个核心功能类
可以看到,直系子类有两个,一个是ContextWrapper,一个是ContextImpl.那么从名字上可以看出,ContextWrapper是上下文功能的封装类,而ContextImpl则是上下文功能实现类.而ContextWrapper又有三个直接的子类,ContextThemeWrapper,Service和Application其中ContextThemeWrapper是一个带主题的封装类,而它有一个直接子类就是Activity
在这里我们至少看到了几个所比较熟悉的,Activity,Serivce还有Application.由此Content一共有三种类型,分别是Application,Activity和Service这三个类虽然不同作用,但是都属于Context的一种,而它们具体Contex的功能则是由ContextImpl类去实现的
二. Context作用
三. Context数量
根据上面,Context一共有Application,Activity和Service三种类型,因此应用程序中的Content数量的计算公式就可以这样写:
Context数量 = Activity数量 + Service数量 + 1个Application;
因为程序中可以有多个Activity和Service但是只能有一个Application