android framework中contexwrapper和contextimpl的关联过程(基于Android 5.1)
16lz
2021-01-23
我们都知道,contexwrapper是contextimpl的代理类,那么它是在哪里把contextimpl和contextwrapper绑定在一起的呢,如下为调用过程:
LoadedApk.java:
ContextImpl appContext = ContextImpl.createAppContext(mActivityThread, this);app = mActivityThread.mInstrumentation.newApplication(cl, appClass, appContext);
Instrumentation.java:
public Application newApplication(ClassLoader cl, String className, Context context) throws InstantiationException, IllegalAccessException, ClassNotFoundException { return newApplication(cl.loadClass(className), context);}
Instrumentation.java:
static public Application newApplication(Class<?> clazz, Context context) throws InstantiationException, IllegalAccessException, ClassNotFoundException { Application app = (Application)clazz.newInstance(); app.attach(context); return app;}
Application.java:
/** * @hide */* package */ final void attach(Context context) { attachBaseContext(context);//这里就是关联的地方,把ContextImpl的context实例传递进attachBaseContext里面 mLoadedApk = ContextImpl.getImpl(context).mPackageInfo;}attachBaseContext做的事情:ContextWrapper.java:protected void attachBaseContext(Context base) { if (mBase != null) { throw new IllegalStateException("Base context already set"); } mBase = base;}//contextimpl的实例就传递给contextwrapper的mBase了,绑定完成。
更多相关文章
- android中无限循环滑动的gallery实例
- Android中AlertDialog用法实例分析
- Delphi xe7 FireMonkey / Mobile (Android, iOS)生成 QR Code完
- Android开发实例之登录界面的实现
- eclipse 中绑定 android源码
- Android JNI和NDK学习(09)--JNI实例二 传递类对象
- android NDK/JNI-实例开发流程
- Android Tab 控件详解及实例
- Material Design综合实例