zygote-->system_server
2012-06-06 12:44
357 查看
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();
创建一个名叫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();
相关文章推荐
- Zygote & System Server & app
- Android 5.0 SystemServer--->Android入口
- Android系统启动分析(Init->Zygote->SystemServer->Home activity)
- android源码解析之(九)-->SystemServer进程启动流程
- zygote-->system_server
- WLS Exception: <BEA-149132> <Split-dir application HRSystem can only be deployed to the Admin Server
- 【Android】init -> Zygote(app_main) -> SystemServer(SystemServer.main)/AppProcess(ActivityThread.main)
- zygote和system_server分析
- Python -> subprocess, os.system,commands,popend -> 模块对比
- Linux 进程通信(System V) 第一节 ------> 管道 pipe
- 我对Windows API拦截技术经典之作Matt Pietrek的<<Windows 95 System Programming Secret>>第十章的研究
- <车载物联网项目,视频采集传输部分,第二天> 使用ffserver输出视频文件流,并且使用使用命令行终端播放视频文件
- <WebLogicServer> <BEA-000386> <Server subsystem failed. Reason: java.lang.NullPointerException
- 安装Win7和Ubuntu12.04双系统后,意外删除Ubuntu12.04引导文件,出现error:unknown filesystem;grub rescue>错误的解决方案
- summary in July <configure Nahanni system>
- Tomcat --> Cannot create a server using the selected type
- Tomcat --> Cannot create a server using the selected type
- Resolved Unlocking issue>unable to determine the source control server
- Android之system_server与zygote之作用