zygote
有时候会遇到报有关zygote的错,这是个什么东西呢,简单理解就是孵化池。
当每个新的进程启动虚拟机的一个新的实例时,如果每次都加载所有必要的基类,则效率会很低。android把每个应用放在独立的进程中,他会利用底层linux操作系统的fork操作,通过模板进程生成新的进程,该进程在启动新的虚拟机实例时能够达到最优状态,该模板进程的名字就是zygote。zygote模板进程是dal...
分类:
其他好文 时间:
2015-03-09 22:32:17
阅读次数:
238
在上一篇博文中我们进行了有关Zygote进程的分析,我们知道Zygote进程创建了一个重要的进程–system_server进程后就进入了无限循环中,之后Android系统中的重要任务就交给了system_server进程,作为zygote的嫡长子进程,system_server进程的意义非凡,今天我们来分析一下system_server进程。...
分类:
移动开发 时间:
2015-03-07 17:17:38
阅读次数:
207
众所周知,Android系统中存在着两个完全不同的世界:
1. Java世界,Google所提供的SDK就主要是针对这个世界的,在这个世界中运行的程序都是基于Dalvik虚拟机的Java程序。
2. native世界,也就是利用C或C++语言开发的程序。那么问题来了,Android系统具体是如何将这两个世界联系起来的,这就是关系到本篇博文所讲的Zygote进程。...
分类:
移动开发 时间:
2015-03-06 19:14:47
阅读次数:
279
1. zygote 本身是一个Native的应用程序,与驱动,内核无关,由init进程根据init.rc的配置项创建起来的。2. zygote 是创建java世界的盘古,创建java世界的步骤: (1) 创建AppRuntime对象,并调用它的start。此后的活动由AppRuntime控制。 (2...
分类:
移动开发 时间:
2015-03-06 15:26:14
阅读次数:
209
前面知道,安装xposed框架后,系统启动,执行init, init 再调用 app_process 程序,由于这时候 app_process 已经被换了,所以app_process 启动后先进入的是 xposedbridge.class 的 main 函数, 这个函数最后才进入标准的 zygote...
分类:
移动开发 时间:
2015-02-28 12:53:01
阅读次数:
511
android启动流程文章已经概述了android的启动流程,而andoird 5.0的流程其实也差不多,少数不同而已。
如下图:
整个启动流程与之前的一样,唯一不同的是android L支持64位的app,所以又起一个Zygote64来专门负责64位APK的孵化。
而且创建Zygote进程脚本在init.zygoteXX.rc里。
如下:
system/co...
分类:
移动开发 时间:
2015-01-15 18:12:51
阅读次数:
346
首先android是基于Linux的内核,只有先加载了kernel才能启动安卓,对于Linux来说android只是其上的一个应用程序。Android的启动大致可以形象的划分为三个过程:
Init->init.rc->zygote。从事嵌入式开发的人都知道,Linux加载完内核驱动后会挂载‘/’根文件系统,挂载完成后会执行‘/init’二进制程序,这也是内核启动后执行的第一个用户程序,andro...
分类:
移动开发 时间:
2015-01-15 09:24:42
阅读次数:
288
Android系统较为庞大,要搞清楚系统运行原理需要长期努力。系统启动部分看了几遍但没有总结,今天简单总结一下。
Android首先重点是启动zygote进程,这个进程来源于init.rc的读取,zygote进程主要用于孵化新的app程序,还包括启动android大量的服务SystemService...
分类:
移动开发 时间:
2014-12-21 19:30:45
阅读次数:
331
因为ClassLoader一定与虚拟机的启动有关系,那么必须从Zygote的启动开始看代码。下面就分析一下这些代码,行数不多:Cpp代码intmain(intargc,constchar*constargv[]){//TheseareglobalvariablesinProcessState.cpp...
分类:
移动开发 时间:
2014-12-19 14:25:42
阅读次数:
305
本节主要内容讲解如何解析init.rc文件和运行zygote.
1.解析init.rc配置文件
/**init.c*/
在main函数中,执行如下函数:
init_parse_config_file("/init.rc");/**init_parse.c*/
int init_parse_config_file(const char *fn)
{
char *data;...
分类:
移动开发 时间:
2014-12-11 12:24:10
阅读次数:
233