Android系统启动杂谈

来源:互联网 发布:宝宝生长曲线软件 编辑:程序博客网 时间:2024/06/07 07:10

Zygote:所有的应用程序进程以及系统服务进程SystemServer都是Zygote fork(孕育)出来。
Zygote本意受精卵。

android本身是一个linux内核的系统。
linux第一个进程是启动init,init启动后读取init.rc文件的定义,并启动app_process。
启动程序之后重命名为zygote。
zygote程序加载ZygoteInit中的main函数,最终调用fork SystemServer,执行init的fork方法创建了SystemServer进程。

ActivityManagerService启动程序,调用的是Pocess.start方法来创建进程。通信过程采用Binder。

Binder采用CS架构,Binder总体分为三个部分。JVM,C++,linux中的Binder块设备。
通信方式,JVM把数据进行序列化传递到C++,C++将数据写入linuxBinder的块设备,然后接受Server端的请求,请求完毕按照原路返回给调用端。

Launcher启动Activity,ActivityManagerServer创建ActivityRecored把它加入这个历史纪录列表里。
Zygote就开始启动应用进程,进程启动后会取得Server的Binder,建立通讯。建立通信后,Server调度Activity执行ScheduleLaunchActivity等操作启动Activity。

ScheduleLaunchActivity本身会对appContext Configuration这些进行配置,attach。