public class ZygoteInit {
//frameworks/base/core/java/com/android/internal/os/ZygoteInit.java
public static void main(String argv[]) {
…
registerZygoteSocket();//注册zygote用的socket
…
preload();//预加载类和资源
…
startSystemServer() //启动system_server进程
…
runSelectLoopMode() //
…
} catch (MethodAndArgsCaller caller) {
caller.run(); //很重要的caller run函数
…
}
private static void registerZygoteSocket(String socketName) {
if (sServerSocket == null) {
int fileDesc;
final String fullSocketName = ANDROID_SOCKET_PREFIX + socketName;
try {
String env = System.getenv(fullSocketName);
fileDesc = Integer.parseInt(env);
} catch (RuntimeException ex) {
throw new RuntimeException(fullSocketName + " unset or invalid", ex);
}