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源碼: