- 從源碼位置上來講
源碼中 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 出來的。