應用程式進程啟動過程
- 2019 年 10 月 8 日
- 筆記
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方法中開啟了消息循環
–摘自《Android進階解密》