其實View並不是直接跟Activity關聯起來的

ctivity工作過程: 
啓動: 
從startActivity開始,它會調用到Instrumentation,然後Instrumentation通過Binder向AMS(ActivityManagerService)發請求,通過PIC啓動Activity。而這個AIDL操作的方法定義在ApplicationThread中(裏面包括了Activity所有的生命週期方法的調用)。然後通過Handle回到主線程啓動activity。 
因爲中間流程太多,詳細寫出來容易造成“見其樹木,而不見其森林”的局面。

啓動Activity所執行的操作: 
1、從ActivityClientRecord中獲取待啓動的Activity組件信息 
2、通過Instrumentation的newActivity方法使用類加載器創建Activity對象 
3、通過LoadedApk的mackApplication方法來嘗試創建Application對象(如果Application已經創建,則不會重複創建) 
4、創建ContextImpl對象,並通過Activity的attach方法來完成一些重要數據的初始化(包括讓Activity跟Window關聯) 
5、調用Activity的onCreate方法

美麗的窗花View

View如何跟Activityhttp://u.cncn.com/space-323-do-blog-id-377295.htmlumentation的newActivity
http://u.cncn.com/space-323-do-blog-id-377142.htmlumentation的newActivity
http://u.cncn.com/space-mtag-tagid-782.html
http://u.cncn.com/space-mtag-tagid-783.html關聯起來的? 
其實View並不是直接跟Activity關聯起來的,而是通過Window這個中間人。如前面所說,View只是窗花,Window纔是直接關聯到Activity上的。那麼: 
View如何跟Window關聯起來呢?

下面先了解一下Window,就可以理解這個問題了

靈活的窗戶Window

Window如何跟Activity關聯? 
每一個Activity都包含了唯一一個PhoneWindow,這個就是Activity根Window(之所以是說根Window是因爲在它上面可以增加更多其他的Window,例如:彈出框(dialog))

那麼,PhoneWindow如何跟Activity關聯起來的呢? 
來個最簡單的,setContentView其實就讓View與Window關聯,Window跟Activity關聯起來了。

那setContentView不是View跟Activity關聯嗎? 
真相見Activity源碼: 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章