了解android的都知道,android系统是建立在linux内核以上,添加了硬件抽象层(保护厂商的利益,保密各种硬件参数),然后搭建了android Framework,android应用就运行在最顶端。
在这里,简要记录自己对Framework启动过程的理解。
首先系统在启动linux内核后,开始启动Framework层。Framework层,是从什么开始启动的呢?linux启动结束的最后,读取init.rc文件,该文件中定义了各种服务程序参数,其中包括Zygote的配置参数。 系统通过app_process启动Zygote进程(该进程包含两个主体,Socket服务端,用于接收启动新的Dalvik进程命令;Framework共享类和共享资源,以至于其他Dalvik启动时,不需要重复装载资源)。当系统的第一个Dalvik进程(zygote)启动后,Socket服务端就可以启动新的Dalvik进程(应用等)。zygote最先启动的进程是SystemServer,这个Dalvik进程启动了Socket客户端,并由Ams负责管理,实际上,Ams是通过Dalvik进程启动的Socket客户端,IPC调用,与zygote通信,通过zygote的Socket服务端,调用DalvikVM,启动新的Dalvik进程。
综上所述,当linux系统启动结束时,读取framework服务配置文件,然后启动第一个zygote DalvikVM进程,启动Socket服务端,用于接收新的启动Dalvik进程命令;准备共享的类和资源。zygote又启动一个SystemServer Dalvic进程,SystemServer启动了Socket客户端,并且由Ams管理, 典型的Binder框架。这样就可以通过Socket客户端进行远程调用了。