最近看源码看到Context这一块,发现很多网上的博客对“安卓应用有几个context”这一个问题统一给出的答案是:
Activity数量+Service数量+1
我通过源码的分析发现根本不是这样,Context的数量应该是:
2*(Activity数量+Service数量+1)
要搞清楚这个问题就需要研究Activity和Application的生成了,Activity和Application的生成都位于ActivityThread的performLaunchActivity方法源代码:
ContextImpl appContext = createBaseContextForActivity(r);
Activity activity = null;
// 1.为Activity生成context
ContextImpl appContext = createBaseContextForActivity(r);
java.lang.ClassLoader cl = appContext.getClassLoader();
//2.通过反射获取Activity实例
activity = mInstrumentation.newActivity(
cl, component.getClassName(), r.intent);
StrictMode.incrementExpectedActivityCount(activity.getClass());
r.intent.setExtrasClassLoader(cl);
r.intent.prepareToEnterProcess();
............
//3.生成Application对象
Application app = r.packageInfo.makeApplication(false, mInstrumentation);
...