1,Android OS启动
Android在Linux字体启动步骤如下:
(1) init 进程启动:内核启动之后启动的第一个用户级进程,该进程将根据init.rc和inir.xxx.rc建立几个基本服务(ServiceManager、Zygote)
(2) Native 服务启动:Servicemanager 和zygote 进程就奠定了Android 的基础。Zygote 这个进程起来才会建立起真正的Android 运行空间,初始化建立的Service 都是Navtive service
建立Java Runtime
建立虚拟机
进入Zygote服务框架(
Zygote 建立好了,利用Socket 通讯,接收ActivityManangerService 的
请求,Fork 应用程
)
(3) System Server,Android 服务启动:Zygote fork一个进程SystemServer,SystemServer建立Android要用到的服务并用init2建立一个线程
(4) Home 启动:
Home 就是在ActivityManagerService.systemReady() 通知的过程中建立的
到这里Android OS就已经启动完成了。
2,Android应用启动
不同的应用在不同的进程空间里运行,加之对不同来源的应用都使用不同的Linux用户来运行,可以最大程度的保护应用的安全和独立运行。Zygote是一个虚拟机进程,同时也是一个虚拟机实例的孵化器,每当系统要求执行一个Android应用程序,Zygote就会FORK出一个子进程来执行该应用程序。