Context类,在Android的开发中十分的常见,在Activity,Service和BroadcastReceiver中都会用到它。
一.Context类
要了解Context类,可以从以下三个方面进行:
1.描述应用程序的环境信息,即上下文。
2.它是一个抽象类(abstract class)。
3.访问应用程序的资源,与其他组件,服务进行交互。
首先来看一下Context类的继承关系:
从上表可以看出,Context类有两个直接子类。
ContextWrapper:功能封装类。
ContextImpl:功能实现类。
在ContextWrapper类下面还有三个子类,其中包括我们常见的Application和Service。ContextThemeWrapper是一个带有主题封装功能的类,所以Activity继承与它。
二.Context类的使用
了解了Context类的继承情况,再来说一下在那些情况下使用Context类。
在Android编程中,Context类可以说是无处不在,弹出Toast,启动Activity,启动Service等等。那么应该在什么情况下来创建Context类呢,可以从以下三个方面来理解:
1.创建Application对象时。
2.创建Activity对象时。
3.创建Service对象时。
由此可知,在一个Android程序中,Context数量 = Activity数量+Service数量+1(一个APP对象只能有一个Application)。在通常情况下,这三种类型的Context对象是可以通用的,需要特别说明的是,在启动Activity或弹出Dialog的情况下,只能使用Activity类型的Context。因为启动一个Activity是在建立在另一个Activity的基础上,同样弹出Dialog也必须基于Activity。
在使用Context的过程中,一般在Activity中,只需要传递一个this即可,匿名内部类则需要传递Activity.this,getApplicationContext是获得这个项目的Context,该Context是唯一的,在AndroidManifest中唯一指定的。