Android系列:context

447 阅读1分钟

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就是皇帝所拥有的各种权利==,==如果皇帝没有了权利,他就是一个普通人==。