Framework的启动过程

近在看Android内核剖析这本书感觉写的挺好的,看到Framework这里就想写写自己所看到的,话不多说,看过程。

大家都知道Linux启动过程的最后内核都将读取init.rc文件,并启动该文件中定义的各种服务程序,而Android系统相对于Linux内核而言仅仅是一个Linux程序,因此Android系统也是在init.rc文件开始。


任何系统启动过程的本质都需要建立在一套系统运行所需要的环境,而Android系统就是运行在Dalvik虚拟机上,它类似java虚拟机。如图所示


系统中运行的第一个Dalvik虚拟机程序叫做zygote,该名称的意义就像是一个“”卵“”,因为接下来的所有Dalvik虚拟机进程都是通过这个“卵”孵化出来的。

 zygote进程中包含两个主要模块,分别如下:

 1、Socket服务端。该Socket服务端用于接受启动新的Dalvik进程命令。

 2、Framework共享类及共享资源。当zygote进程启动后,会装载一些共享的类和资源,其中共享类是在preload-classes文件中定义的,共享资源是在preload-resources中定义的。因为zygote进程用于孵化其他Dalvik进程,因此,这些类和资源装载完后,新的Dalvik进程就不需要再装载这些类和资源了,这就叫资源共享。


 zygote进程对应的具体程序是app_process,该程序存在于system/bin目录下,启动改程序的指令是在init.rc中进行配置的。

 zygote孵化出的第一个Dalvik进程叫做SystemServer,SystemServer仅仅是该进程的别名,而该进程对应的程序依然是app_process,因为SystemServer是从app_process中孵化出来的。

 SystemServer中创建了一个Socket客户端,并由AmS负责管理该客户端,之后所有的Dalvik进程都将通过该Socket客户端间接被启动,当需要启动新的APK的时候,Ams会通过该客户端像zygote进程的Socket服务端发送一个启动命令,然后zygote会孵化出新的进程。

 从系统架构的角度来讲,就在于此即先创建一个zygote,并加载共享类和资源,然后通过该zygote去孵化新的Dalvik进程,该架构的特点有两个:

 1、每一个进程都是一个Dalvik虚拟机,而Dalvik虚拟机是一种类似于java虚拟机的程序,并且从开发的过程来看,与标准的java程序开发基本一致。

 2、zygote进程预先会装载共享类和共享资源,这些共享类和资源就是SDK中定义的大部分类和资源,因此,当通过zygote孵化出的新的进程后,新的APK只需要去装载APK自身包含的类和资源即可,这就有效的解决了多个APK共享Framework资源的问题。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值