1.Context本身是一個(gè)純的abstract類(lèi)姜贡,ContextWrapper是對(duì)Context的一個(gè)包裝而已试吁,它的內(nèi)部包含了一個(gè) Context對(duì)象,其實(shí)對(duì)ContextWrapper的方法調(diào)用最終都是調(diào)用其中的Context對(duì)象完成的楼咳,至于 ContextThremeWrapper熄捍,很明顯和Theme有關(guān),所以Activity從ContextThemmWrapper繼承母怜,而 Service從ContextWrapper繼承余耽,ContextImpl是唯一一個(gè)真正實(shí)現(xiàn)了Context中方法的類(lèi)。
2. Activity和Service本沒(méi)有真正的實(shí)現(xiàn)苹熏,他們只是內(nèi)部包含了 一個(gè)真實(shí)的Context對(duì)象而已碟贾,也就是在在創(chuàng)建Activity或者Service的時(shí)候肯定要?jiǎng)?chuàng)建愛(ài)你一個(gè)ContextImpl對(duì)象,并賦值到 Activity中的Context類(lèi)型變量中轨域。那我們就來(lái)看看Andorid源碼中有哪些地方創(chuàng)建了ContextImpl.
據(jù)統(tǒng)計(jì)Android中創(chuàng)建ContextImpl的地方一共有7處:
在PackageInfo.makeApplication()中
在performLaunchActivity()中
在handleCreateBackupAgent()中
在handleCreateService()中
2次在hanldBinderAppplication()中
在attach()方法中