1. Android系统中有几种类型的Context
有三种:Application、Activity、Service, 注意BroadCastReceiver,ContentProvider是没有自己的Context的 看看它们的继承关系
public class Application extends ContextWrapper {}
public class Activity extends ContextThemeWrapper{}
public abstract class Service extends ContextWrapper{}
2.Context的初始化
其实这三种Context的初始化比较类似,我们拿Activity作例子看看
private Activity performLaunchActivity(ActivityClientRecord r, Intent customIntent) {
//创建context
ContextImpl appContext = createBaseContextForActivity(r);
//new Activity
java.lang.ClassLoader cl = appContext.getClassLoader();
activity = mInstrumentation.newActivity(
cl, component.getClassName(), r.intent);
//直接去拿Application信息,这里不需要再次创建,因为application已经创建完毕了
Application app = r.packageInfo.makeApplication(false, mInstrumentation);
//
activity.attach(appContext, this, getInstrumentation(), r.token,
r.ident, app, r.intent, r.activityInfo, title, r.parent,
r.embeddedID, r.lastNonConfigurationInstances, config,
r.referrer, r.voiceInteractor, window, r.configCallback);
}
//将context 赋予给父类的mBase
final void attach(Context context, ActivityThread aThread,
Instrumentation instr) {
attachBaseContext(context);
}
3.Context的作用
context让Activity等应用组件具有上下文意义,这些资源利用context就可以调用系统资源和服务了,否则Activity等组件就是一个普通的java类。类比一下, ==Activity应用组件是皇帝==,==那么context就是皇帝所拥有的各种权利==,==如果皇帝没有了权利,他就是一个普通人==。