zygote-->system_server

init进程通过init.rc中 service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
创建一个名叫zygote的新进程(源码目录为frameworks/base/cmds/app_process/app_main.cpp), zygote进程主要调用如下代码
zygote:
//创建Java Runtime
AndroidRuntime::start("com.android.internal.os.ZygoteInit", "start-system-server");
-->startVm //start the virtual machine
-->startReg //Register native function
-->ZygoteInit.main //这里是通过env->CallStaticVoidMethod(startClass, startMeth, strArray)来间接调用的
-->registerZyogteSocket()// Registers a server socket for zygote command connections
-->startSystemServer() //创建一个名叫system_server的系统服务进程
-->Zygote.forkSystemServer() /* Request to fork the system server process , use underlay's fork() to create a new process */
/*等待其它进程发出命令请求
-->if (ZYGOTE_FORK_MODE) { 
runForkMode();
--> while (true) {
pid = Zygote.fork(); /* 创建一个新进程来服务客户端的请求 */
}
  } else {
runSelectLoopMode();
--> while (true) {

}
  }


system_server进程:
当zygote进程通过调用Zygote.forkSystemServer()创建system_server进程后,system_server进程主要调用的代码为


handleSystemServerProcess() //ZygoteInit.java
-->RuntimeInit.zygoteInit()
-->applicationInit()
-->invokeStaticMain(args.startClass, args.startArgs) /* args.startClass ="com.android.server.SystemServer", 这个参数的值是在startSystemServer()函数里定义的参数 */
-->SystemServer.main() //SystemServer.java
-->SystemServer.init1() /*本地方法,本地实现文件为com_android_server_SystemServer.cpp*/
    -->system_init() //system_init.cpp
-->回调SystemServer.init2()
-->new ServerThread("android.server.ServerThread) //创建一个线程来初始化系统的各种服务
-->run() {
//建立一系列的service
eg:Slog.i(TAG, "Power Manager");  
          power = new PowerManagerService();
          ServiceManager.addService(Context.POWER_SERVICE,power);
....
                                        Slog.i(TAG, "Window Manager");
               wm = WindowManagerService.main(context, power,
                       factoryTest != SystemServer.FACTORY_TEST_LOW_LEVEL,!firstBoot);
                   ServiceManager.addService(Context.WINDOW_SERVICE, wm);
....


}


/* 循环闭合管理框架 */
-->ProcessState::self()->startThreadPool();
-->IPCThreadState::self()->joinThreadPool();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值