Android zygote与进程创建(一)
来源:互联网 发布:怎么下载淘宝搜索量 编辑:程序博客网 时间:2024/06/05 12:43
转载:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=82883
在android中,应用程序的入口是ActivityThead中的main函数,那么之后系统是怎样为应用程序创建进程的呢?SystemService又是怎样创建的?答案是:zygote
zygote翻译成中文是受精卵的意思,名字比较奇怪、但是很有意思。在android中,大部分的应用程序进程都是由zygote来创建的,为什么用大部分,因为还有一些进程比如系统引导进程、init进程等不是有zygote创建的。相反,zygote还是在init进程之后才被创建的。在android中提到zygote,主要两块,一个是C/C++编写的zygote,主要用来为应用和SystemService fork进程的。一个是java编写的zygote接口,负责为应用和service调用C/C++ zygote的接口执行fork,从而创建VM进程。说明:在android中,service主要有NativeService和SystemService。SystemService主要是指系统中service,比如,InputMethodService、ActivityManagerService等。
zygote在android中主要有两个作用:
1.建立运行时环境并启动虚拟机,执行com.android.internal.os.ZygoteInit的main函数,从而fork SystemService
java代码:
2.为应用程序创建DVM进程。
启动SystemServer:
我们来看看zygote是怎样创建SystemService进程的。在../base/cmds/app_process/app_main.cpp的主函数中,有这样一段代码,它执行了runtime.start("com.android.internal.os.ZygoteInit", startSystemServer); //runtime继承自AndroidRuntime也就是说,在主函数中,初始化了运行时环境,并且建立虚拟机,然后运行再com.android.internal.os.ZygoteInit的main函数
再来看看com.android.internal.os.ZygoteInit的main中都做了哪些事情。在看ZygoteInit之前,有必要先来看下相关的类,类图如下:
在ZygoteInit的main函数中,主要执行了:
java代码:
startSystemServer()调用Zygote的native方法 forkSystemServer(); 到这里,java端的Zygote的准备工作就结束了,接下来就交给C/C++端的Zygote来执行fork任务了。来看下代码:
在 ../dalvik/vm/native/dalvik_system_Zygote.c 中
java代码:
- Android zygote与进程创建(一)
- Android zygote与进程创建(一)
- Android zygote与进程创建(二)
- Android zygote与进程创建(二)
- Android 之 zygote 与进程创建
- Android 之 zygote 与进程创建
- Android 之 zygote 与进程创建
- Android 之 zygote 与进程创建
- Android 之 zygote 与进程创建
- Android 之 zygote 与进程创建
- Android 之 zygote 与进程创建
- Android 之 zygote 与进程创建
- Android 之 zygote 与进程创建
- 【Android系统内的进程】Zygote进程的创建
- Android应用进程启动流程(Zygote进程与SystemServer进程)
- (OK) Android应用进程启动流程(Zygote进程与SystemServer进程)
- Android zygote进程启动
- Android入门进阶教程(15)-进程创建zygote 详解
- Oracle基础——第六章 查询
- [jBPM5 部署] 最可靠,最简洁方式
- 处境好难的毕业生
- 矩阵快速幂好题PvZ once again
- ZOJ 1076 Gene Assembly(LIS)
- Android zygote与进程创建(一)
- 大师推荐的Oracle数据库相关的书籍,收集汇总。
- PHP自学之路-----PHP基础数据类型及运算符介绍
- Android zygote与进程创建(二)
- JS DOM
- B. Ternary Logic
- 如何恢复被误删的 log 文件
- c++基础知识
- Python禅