Android 應用的真正入口 - ZygoteInit.java

  1. 從源碼位置上來講
源碼中 ActivityThread的位置:
/frameworks/base/core/java/android/app/ActivityThread.java
可以看到是位於 app 這個包裏面的。

而ZygoteInit 的源碼位置如下:
/frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
是放在internal/os下面的。(internal的意思是:內部的;內在的;國內的)

2.從功能上來講

ZygoteInit有如下幾大函數:
private static void registerZygoteSocket(String socketName) static void preload() // 預加載資源 
private static void handleSystemServerProcess() 
private static PathClassLoader createSystemServerClassLoader(String systemServerClasspath, int targetSdkVersion) 
private static boolean startSystemServer(String abiList, String socketName)       //啓動SystemServer進程。

簡單來說就是建立Socket通信,預加載資源,啓動SystemServer. 人如其名,就是初始化 Zygote用的。而進程的fork,是Zygote乾的事情。

而ActivityThread 則是 App的管家,個人覺得叫 AppProcessManager 更貼切一些。具體內容可以參考其代碼。
其main函數主要乾了兩件事:
1. 創建 MainLooper.
2. 創建 ActivityThread 對象.

ActivityThread 乾的事情才和具體的 App 有關係,而ZygoteInit 只是做Zygote的初始化工作,儘管一個App的進程是從 Zygote fork 出來的。
發佈了116 篇原創文章 · 獲贊 26 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章