簡單描述應用的啓動過程

1.android系統啓動第一個進程是init。

 

2.init會fork出一個叫zygote的進程。(所有的應用進程都是由zygote fork出來的)

   zygote進程實際上是個jvm上的進程,啓動jvm,打開監聽端口(registerZygoteSocket),預加載類和資源。

 

3.zygote啓動過程中,會fork一個system_server,因爲是完全複製的zygote,所以需要關閉運行到現在爲止的一些東西,比如監聽端口。

 

4.system_server裏面會啓動ActivityManagerService等服務,來監聽創建activity的請求。

 

5.ActivityManagerService收到需要啓動activity的請求時,先看看有沒有相對應的已經註冊過的進程,如果沒有,通知zygote,讓它fork一個進程,然後註冊。如果有,直接發消息通知進程啓動activity。

 

爲什麼要這麼費勁呢?主要是快,android上都是java程序,每個進程都是一個jvm,啓動時要初始化加載很多類,而且這部分都是重複的,重新創建當然沒有複製來的快,另外linux上的fork遵循copy-on-write,所以還是可以共享父進程很多資源地。

發佈了151 篇原創文章 · 獲贊 1 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章