一、Android系统的一般性框架
一、android 系统的启动流程
一张自做草图先大概了解下:
第一个android进程,或许说是第一个dalvik进程zygote进程,是在init.rc中用命令启动的,init.rc在device/方案商/产品型号 中,各个厂商可能会有不同的命名,比如rk init.rk30board.rc。里面会有启动zygote进程和传参的具体细节,如果想深入了解可参考老罗的系列文章:Dalvik虚拟机的启动过程分析。
我这里引入一个形象的比喻,也是出自一位网友的博客。如果android是一个世界,我们把init.rc比喻成造物者,它创造的第一个人就是亚当(zygote),亚当(zygote)一个人太寂寞,用自己的肋骨(fork 子进程)创造了夏娃(SystemServer),夏娃(SystemServer)负责创建更多的人(package service,power service。。。。。),当创造的东西太多了,就需要一个管家(activity manage service)来管理,就这样人数(service)越来越多,但是仍然井然有序,每一个人的祖先都是zygote,他们的基因(各自所对应的dalvik虚拟机实例,或者后面版本的ART虚拟机实例)都是从祖先(zygote)遗传下来(zygote fork子进程之前就已经初始化了dalvik/art 虚拟机,所以都会复制一份给到子孙进程)。如果这个世界想诞生新的人(service)