1.Zygote的作用是什么
- 1.启动SystemServer
- 2.孵化应用进程
2.Zygote的启动流程
先理解进程启动的基本流程:
- loop循环就是接收各种消息处理消息。
3.Zygote的进程启动
接下来看下进程是如何启动的,以及启动完进程后,它做了哪些工作
-
1.首先启动init进程,它是Linux系统启动之后,用户空间的第一个进程。
-
2.启动后加载配置文件(init.rc),检查配置文件中需要启动的系统服务。Zygote就是要启动的服务之一。
上面是从网上找到的配置文件中关于zygote相关的一部分代码图片
红色的是要启动的服务名称
蓝色的是启动它的可执行程序的路径
黄色的是相关参数 -
3.init进程启动服务有2种方式:
- 1.都是调用fork函数,创建子进程
- 2.子进程中,pid返回的是0,父进程中返回的是子进程的pid,所以可以通过这一点来判断是否是在子进程。
- 3.子进程在创建的时候会默认继承父进程的所有资源,但是如果在子线程中调用了execve加载另一个二进制程序的话,继承的父类进程的资源就会被清掉,被新的二进制程序替换掉。
信号处理
3.Zygote的准备工作
4.Zygote的LOOP循环
每当有消息到来的时候,就会调用这个函数,
- 1.先读取参数列表。
- 2.根据参数启动子进程
- 3.在子进程中工作,调用handleChildProc()方法,这个方法其实就是调用ActivityThread.main()函数。
其实每当进程启动之后就会调用ActivityThread.main()函数