我們做安卓開發(fā),時時都在和Context打交道,那么Context到底是什么?有什么作用?如何與Application,Activity,Service等實例發(fā)生聯(lián)系的?等等
Context是什么?
Context的字面意思是“上下文”,那么這個“上下文”到底指的是什么?“上”指的是什么?“下”指定的是什么?
個人的理解,有助于自己的理解的方式,不一定對,如果有更好的看法可以一塊交流學(xué)習(xí)。個人的理解,“上”指的是在APP啟動的時候,就與Context有關(guān)了,這個時候還是系統(tǒng)啟動階段,就與Context發(fā)生了聯(lián)系。
“下”指定的是在APP界面正常顯示出來以后,正常與用戶交互的過程中,可以用Context獲取資源,系統(tǒng)服務(wù)等。所以Context所謂的上下文就是承上啟下的作用。
Context的類的繼承關(guān)系
從上圖可以看到,Context只有一個實現(xiàn)類ContextImpl,Application,Service,Activity都是直接或者間接繼承了ContextWrapper,ContextWrapper中有一個變量mBase,也是個Context類型,實際是ContextImpl的對象,Application,Service,Activity所有的操作都是委托給了mBase實現(xiàn)。Context既然是承上啟下,是個上下文,和APP啟動流程有關(guān),先來看看系統(tǒng)的啟動流程和APP的啟動流程,都在一張圖里,如下:
從上圖可以看到:
首先系統(tǒng)的第一個進程 init跑起來,作一些初始化相關(guān)的工作,然后通過系統(tǒng)調(diào)用fork出了一個zygote進程,init進程通過poll阻塞在那了。
zygote進程被init進程fork出來以后,做一些jni初始化等,通過調(diào)用fork出了一個SystemServer進程,SystemServer進程里面跑的都是安卓的系統(tǒng)服務(wù),zygote通過jni調(diào)用java的代碼,fork出了SystemServer進程,打開了java世界