App的啓動過程

Launcher 中的 Icon 點擊,broadcast 發送,啓動 Service 等組件見的跳轉,都會通過 AndroidManagerProxy 來進行中轉,而 AndroidManagerProxy 通過向 SystemServer 請求名爲 Activity 的 ActivityManagerService 的 Binder 對象,這個 Binder 對象可以粗略地看作是 ActivityManagerService 的句柄,從 Binder 對象可實際操作 ActivityManagerService。

ActivityManagerService 在實際啓動相應組件時,會先判斷是否有相應的 ProcessRecord,如果不存在,就需要新建進程,這個進程就是相應的應用進程。ActivityManagerService 通過 Socket 通信的方式和 Zygote 進行協商,Zygote 在其監聽的 /dev/socket/zygote socket 中發現有需要創建進程的請求後,會 fork 自身,並返回相應的 Process Id。這個 Process 會進行相應的初始化,使得其具備與系統服務進行 IPC 通信的能力,在此之後,調用 ActivityThread 中的 main 方法,開啓 Looper,主線程啓動。到此爲止,整個應用進程啓動完畢。

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