Activity,Service,Application 关系图。 (课外)ContextWrapper和是一种装饰模式
1. ContextWrapper就是一个包装类没有具体的实现,真的是逻辑代码都在ContextImpl中,ContextImpl继承自抽象类Context,并实现了其中的抽象方法。
2. Context类是最上层的抽象类,在内部定义了大量的抽象方法,其startActivity方法也定义其中。
3. Activity继承自ContextThemeWapper而ContextThemeWapper又继承自ContextWrapper,最终ContextWrapper才继承自Context。 切记在ContextWapper中是持有Context引用的,而这个Context其实就是ContextImpl也就持有ContextImpl对象。
那么ContextImpl是在何时被创建, 即在 ActivityThread中调用getHandler()方法这个方法返回了以一个H对象,
在处理这段调用主要调用了handelLaunchActivity方法来处理没在这个方法中又调用了performLaunchActivity方法获取到了Activity的实例。
在performLaunchActivity中会对Activity进行大量的初始化参数。
并且可以看出Activity和Application,Context是密不可分的.
那么我们分析下createBaseContextForActivity是怎么初始化ContextImlp的,
在createBaseContextForActivity方法中通过ContextImpl的静态方法,createActivityContext方法获取到ContextImpl实例对象,并通过setOuterContext进行和Activity关联。
而Application中就比较简单了同过,markeApplication 创建了一个 Application而这个Application就贯穿全局了。
从此得出 Activity(个数)+Service(个数)+1个Application =Context个数。