淺談zygote服務中的設計思路
阿新 • • 發佈:2019-01-05
zygote服務是Android啟動和服務APK的核心服務,每個APK都是通過zygote啟動,今日閱讀它的原始碼學習到一個不錯的設計思路。
首先看看一個APK通過zygote的啟動流程:
按照一般的設計思路,既然每個APK都是由單獨的dalvik啟動和執行,那麼直接通過dalvikvm啟動main不就完了嗎?為啥還要搞得這麼長一串流程。其實關鍵就在於這個Fork。我們看看對於linux啟動一個程序的一般流程:
- 核心建立一個程序資料結構
- 核心從指定的程式檔案讀取程式程式碼並裝載到設定的記憶體地址
- 核心從指定的目標程式入口執行程式碼
- /framework/base/cmds/app_process/app_main.cpp:zygote服務啟動入口
- /frameworks/base/core/java/com/android/internal/os/ZygoteInit.java:初始化Socket服務端,並負責fork dalvik程序
- /libcore/dalvik/src/main/java/dalvik/system/Zygote.java:包裝native fork方法