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個數。