應用程式程序啟動過程
阿新 • • 發佈:2018-12-24
--摘自《Android進階解密》
1.AMS在啟動應用程式時會檢查者應用程式需要的應用程序是否存在,不存在就會請求Zygote程序啟動需要的應用程式程序
2.Zygote的Java框架層中會建立一個Server端的Socket,這個Socket用來等待AMS請求Zygote來建立新的應用程式程序
3.Zygote程序通過fock自身建立應用程式程序,這樣應用程式程序就會獲得Zygote程序在啟動時建立的虛擬機器例項。當然還建立了Binder執行緒池和訊息迴圈,這樣執行在應用程序中的應用程式就可以方便地使用Binder進行程序間通訊以及處理訊息了
應用程式程序啟動過程
第一步:AMS傳送啟動應用程式程序請求
第二步:Zygote接收請求並建立應用程式程序
其中:
4.ZygoteInit類的zygoteInit方法會啟動Binder執行緒池
5.將當前執行緒註冊到Binder驅動程式中,這樣我們建立的執行緒就加入了Binder執行緒池中,新建立的應用程式程序就支援Binder程序間通訊了,我們只需要建立當前程序的Binder物件,並將它註冊到ServiceManager中就可以實現Binder程序間通訊
6.RuntimeInit的invokeStaticMain方法最後會丟擲一個MethodAndArgsCaller異常,抓取異常過程中會執行call.run方法,run方法中會呼叫mMethod.invoke,其實就是ActivityThread的main方法,main方法中開啟了訊息迴圈