由代码可以看出,在调用函数 invokeStaticMain 的最后会抛出一个异常。
public static class MethodAndArgsCaller extends Exception implements Runnable
回过头再看一下 ZygoteInit 类的 main 函数中的一段代码
} catch (MethodAndArgsCaller caller) { caller.run(); }其实就是在这个抛出的异常中启动了 SystemServer 类,且这个异常为一个 Runnable 类型,因此 SystemServer 类就运行在 system_server 进程中的一个新的线程里。
2.SystemServer 执行内容
1. 执行 frameworks/base/cmds/system_server/library/system_init.cpp 中的 system_init 函数,启动当前进程,也就是进程 system_server 的 pool thread ,以便执行 Binder IPC 操作。
2. 向 SM(Service Manager) 添加系统服务。