File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -194,10 +194,12 @@ Android平台的基础是Linux内核,比如ART虚拟机最终调用底层Linux
194194- init进程孵化出Zygote进程,Zygote进程是Android系统的第一个Java进程(即虚拟机进程),` Zygote是所有Java进程的父进程 ` ,Zygote进程本身是由init进程孵化而来的。
195195
196196- Zygote进程.是由init进程通过解析init.rc文件后fork生成的.
197- Zygote本身是一个Native的应用程序,与驱动、内核等均无关系。Zygote最初的名字叫“app_process”,这个名字是在Android.mk文件中指定的,但在运行过程中,app_process通过Linux下的pctrl系统调用将自己的名字换成了“Zygote”,所以我们通过ps命令看到的进程名是“Zygote”。
197+ Zygote本身是一个Native的应用程序,与驱动、内核等均无关系。Zygote最初的名字叫“app_process”,这个名字是在Android.mk文件中指定的,但在运行过程中,app_process通过Linux下的pctrl系统调用将自己的名字换成了“Zygote”,所以我们通过ps命令看到的进程名是“Zygote”。Zygote是在Android系统中创建Java世界的盘古,它创建了第一个Java虚拟机,同时它又是女娲,它成功地繁殖了framework的核心system_server进程。
198198 Zygote进程主要包含:
199- - 加载ZygoteInit类,注册Zygote Socket服务端套接字.Zygote及系统中其他程序的通信没有使用Binder,而是采用了基于AF_UNIX类型的Socket。
200- - 加载虚拟机
199+ - 创建AppRuntime对象,并调用它的start。此后的活动则由AppRuntime来控制。
200+ - 加载虚拟机:调用startVm创建Java虚拟机,然后调用startReg来注册JNI函数。
201+ - 加载ZygoteInit类,通过JNI调用com.android.internal.os.ZygoteInit类的main函数,从此进入了Java世界。然而在这个世界刚开创的时候,什么东西都没有。注册Zygote Socket服务端套接字.Zygote及系统中其他程序的通信没有使用Binder,而是采用了基于AF_UNIX类型的Socket。调用registerZygoteSocket。通过这个函数,它可以响应子孙后代的请求。
202+ - 启动System Server进程(分裂出了一个system_server进程):zygote觉得自己的工作压力太大,便通过调用startSystemServer分裂一个子进程system_server来为Java世界服务。Java世界中系统Service所驻留的进程system_server,该进程是framework的核心。如果它死了,就会导致Zygote自杀。
201203 - 预加载类preloadClasses:preloadClass函数的执行时间比较长,这是导致Android系统启动慢的原因之一。
202204 - 预加载资源preloadResouces:它主要是加载framework-res.apk中的资源。在UI编程中常使用的com.android.R.XXX资源是系统默认的资源,它们就是由Zygote加载的。
203205- System Server进程,是由Zygote进程fork而来,` System Server是Zygote孵化的第一个进程 ` ,System Server负责启动和管理整个Java framework,包含ActivityManager,WindowManager,PackageManager,PowerManager等服务。
You can’t perform that action at this time.
0 commit comments