参考http://blog.csdn.net/luoshengyang/article/details/6766010
Android应用程序框架层创建的应用程序进程有两个特点:
进程的入口是ActivityThread.main
进程天然支持Binder进程通信机制
1.ActivityManagerService.startProcessLocked
2.Process.start:为应用程序创建新的进程,他传入的第一个参数是android.app.ActivityThread
3.Process.startViewZygote:将创建进程的参数放到argsForZygote参数列表中,runtime-init:
表示要为新创建的进程初始化运行库
4.Process.zygoteSendAndGetPid:sZygoteWriter是一个socket写入流,由openZygoteSocketIfNeeded打开
5.ZygoteInit.runSelectLoopMode
6.ZygoteConnection.runOnce:Zygote.forkAndSpecialize创建进程
7.ZygoteConntection.handleChildProc
8:RuntimeInit.zygotInit:这里有两个关键的函数调用:
zygoteInitNative:执行binder驱动程序初始化的相关工作
invokeStaticMain:执行进程的入口工作,执行android.app.ActivityThread的main函数
9.RuntimeInit.invokeStaticMain:这个函数里并没有直接调用静态函数main,而是抛出了
ZygoteInit.MethodAndArgsCaller异常,然后让ZygoteInit.main函数捕获这个异常,在调用
main函数。这样使用了清理堆栈
10.ActivityThread.main:这样就可以在进程中启动Activity或service
上述过程不仅指定了进程的入口函数ActivityThread.main,而且还为进程间的Binder通信机制
提供了基础设施。