android zygote 到launcher的啓動關鍵點

zygote 啓動:app_main.cpp main()
設置process name爲zygote, 
AppRuntime->start(), 有可能爲com.android.internal.os.ZygoteInit(開機爲此case)  或者 RuntimeInit.
startVm(): 通過property等加載各項dalvik 參數並啓動VM。
startReg():註冊各項native jni, 如media/graphic/os/view/opengl/hardware/database/...
找到java 類並call對應類中的main方法,開機對應到ZygoteInit裏的main();

ZygoteInit: main()
registerZygoteSocket():  創建一個socket 接收zygote命令。
preload():加載classes, resources,opengl. 
startSystemServer():
Zygote.forkSystemServer()
Zygote類是vm中native定義的類,
fork啓動SystemServer
子進程進入handleSystemServerProcess()----------->下面繼續

runSelectLoop():父進程繼續執行
while循環accept zygote server socket 
有新的需求後,ZygoteConnection.runOnce
forkAndSpecialize();
子進程:handleChildProc()
invokeStaticMain()啓動new request的main函數。
主要的實現方式是通過拋出異常,MethodAndArgsCaller,然後回到ZygoteInit: main()有catch到而繼續執行,MethodAndArgsCaller.run。
父進程: handleParentProc():會做一些清理工作,如果需求繼續處理,並不會remove當前request。


closeServerSocket():父進程close server socket


子進程進入handleSystemServerProcess:
RuntimeInit.zygoteInit()
RuntimeInit.applicationInit()
invokeStaticMain: SystemServer.main()
ServerThread()
:initAndLoop啓動各個framework service: AMS/WMS/PMS/....
ActivityManagerService.main() 中AMS systemready時會啓動launcher。



Launcher啓動:
Launcher的intent-filter會有HOME標籤。
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
AMS.startRunning();
AMS.systemReady();
resumeTopActivitiesLocked();
resumeTopActivityLocked();
ActivityStackSupervisor.resumeHomeActivity();
AMS.startHomeActivityLocked(Home intent:category.HOME);



System_server啓動參數。
String args[] = {
            "--setuid=1000",
            "--setgid=1000",
            "--setgroups=1001,1002,1003,1004,1005,1006,1007,1008,1009,1010,1018,1032,3001,3002,3003,3006,3007",
            "--capabilities=" + capabilities + "," + capabilities,
            "--runtime-init",
            "--nice-name=system_server",
            "com.android.server.SystemServer",
發佈了25 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章