Framework三部分理论:服务端 客户端 驱动 服务端:AMS PMS WMS 客户端:ActivityThread,Activity,DecodeView及父类View,PhoneWindow,ViewRootImpl 驱动:SurfaceFlingger、Binder
FrameWork启动流程
操作系统的一般启动流程,分为三个步骤:
- 开机通电后,加载 bootloader 程序
- 操作系统内核初始化 (下面说这个)
- 执行第一个应用程序
Android内核初始化:
1 init.rc
在init进程解析 init.rc *,文件中配置了系统服务, 从这里启动 Zygote 进程
2 app_process
zygote要执行的程序是system/bin/app_process,它的源代码位于frameworks/base/cmds/app_process/App_main.cpp文件中
3 AppRuntime
初始化AppRuntime*:创建虚拟机、注册JNI函数、调用了Java的main方法(ZygoteInit.java的main方法)
4 ZygoteInit.java
ZygoteInit.java的main方法: 创建Socket、加载系统资源、启动子进程system_server、runSelectLoop 等待socket接入,开始执行fork新的进程.
5 SystemServer
SystemServer 启动的过程(/SystemServer.java的main方法): 创建一个自己的对象,并执行run方法: run方法中了设置手机时间,设置虚拟机内存大小,创建消息循环Looper,启动了我们的核心服务和常用服务(AMS,PMS,WMS等)。 Ams启动完成的systemReady回调中,显示Launcher
Q&A
init进程: init 进程是系统中所有进程的父进程,它是启动 Linux 系统后第一个运行的程序;它管理着系统上的所有其它进程。它由内核自身启动,因此理论上说它没有父进程。
init.rc是啥: 添加链接描述
app_main.cpp: zygote最初的名字叫“app_process”,这个名字是在Android.mk文件中被指定的,但app_process在运行过程中,通过Linux下的pctrl系统调用将自己的名字换成了“zygote”,所以我们通过ps命令看到的进程名是“zygote”。 添加链接描述
AppRuntime: 父类是AndroidRuntime,启动了Java类ZygoteInit。
资料
深入理解Android:卷1
|