android 启动过程
1.电源开启
2.加载boot loader
3.启动linux kernel
4.启动android init.rc
此过程启动一些属性服务,用来保存类似window注册表一样的属性,同时启动孵化器,孵化器用来启动android 虚拟机并加载各种系统服务
总结起来init进程主要做了三件事:
1.创建一些文件夹并挂载设备
2.初始化和启动属性服务
3.解析init.rc配置文件并启动zygote进程
5.ZygoteInit 启动
ZygoteInit 类里还多做了如下几件事情,让我们一一详细解析。
registerZygoteSocket();
startSystemServer();
runSelectLoopMode();
6.SystemServer
System Server会启动一系列的Service, 其中最重要的就是Acitivity Manager 和Window Manager.
单个服务的实现过程:
1. 初始化Service 对象,获得IBinder对象。
2. 启动后台线程,并进入Loop等待。
3. 将自己注册到Service Manager, 让其他进程通过名字可以获得远程调用必须的IBinder的对象。
注意!进程 并不是由ActivityManager创建的,别忘了,我们前面提到Zygote是所有Android 应用的孵化器,对,ActivityManager 只是通知Zygote创建而已
ZygoteInit一旦发现System Server 挂掉了,将其回收,然后将自己杀掉,重新开始新的一生,启动过程
7.ActivityManagerServer接受其他服务器加载完成的标识SystemReady()判断没个服务必须要的服务完成后,再发送 BootComplete 广播,然后
startHomeActivityLocked 拉起主要的Launcher app
至此整个系统加载起来了
总结
Zygote和System Server的启动过程终于介绍完了,让我们对着上面这张完整的类图再来重温一下这个过程吧。
1. init 根据init.rc 运行 app_process, 并携带‘--zygote' 和 ’--startSystemServer' 参数。
2. AndroidRuntime.cpp::start() 里将启动JavaVM,并且注册所有framework相关的系统JNI接口。
3. 第一次进入Java世界,运行ZygoteInit.java::main() 函数初始化Zygote. Zygote 并创建Socket的server 端。
4. 然后fork一个新的进程并在新进程里初始化SystemServer. Fork之前,Zygote是preload常用的Java类库,以及系统的resources,同时GC()清理内存空间,为子进程省去重复的工作。
5. SystemServer 里将所有的系统Service初始化,包括ActivityManager 和 WindowManager, 他们是应用程序运行起来的前提。
6. 依次同时,Zygote监听服务端Socket,等待新的应用启动请求。
7. ActivityManager ready 之后寻找系统的“Startup” Application, 将请求发给Zygote。
8. Zygote收到请求后,fork出一个新的进程。
9. Zygote监听并处理SystemServer 的 SIGCHID 信号,一旦System Server崩溃,立即将自己杀死。init会重启Zygote.
分享到:
相关推荐
Android 启动过程详解。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
Android启动过程分析 Android启动过程源码分析
Android 启动过程相关资料 合集, makefile 解析
Android 启动过程简单介绍,共计6页.
android 核心分析之------Android 启动过程详解
Android启动过程详解[借鉴].pdf
android核心分析之------Android启动过程详解.pdf
android启动流程,以uml图的方式显示了android的启动流程
此文档是根据sundy讲解的android启动视频而进行整理的,主要是跟踪andoird的系统开机过程,
Android 启动过程分析 首先看看整体开机流程。这个对于软件开发测试工作非常有用,特别是在项目初期的时候,通常出在驱动或者启动参数上面的问题比较多,比如关机充电,连接charger关机等问题。 一般开机过程大致...
于Android启动过程复杂,涉及C、C++及java部分内容,本文以流程分析为主线旨在让大家在分析Android系统时有个清晰的思路。鉴于本人水平有限,如有阐述不正之处,还请不吝指正,感激不尽! 系统启动大致可分为一下几...
Android 启动过程分析
android init启动分析,是分析android的启动过程,可以辅助你对android启动过程的理解
linux 内核启动过程以及挂载android 根文件系统的过程
本篇文章主要介绍了浅谈android性能优化之启动过程(冷启动和热启动) ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
android启动过程配置文件的解析与语法 28 android系统开发(四)-触摸屏tslib移植(内核)和原理分析 32 android系统开发(五)-tslib移植 47 Ubuntu下svn安装和使用 50 android系统开发(七)-背光模块 56 android系统开发...
Android启动,第三阶段,SystemServer创建。 紧接上两篇《 Android启动-init介绍》和《Android启动-Zygote启动介绍》Linux内核启动之后,执行第一个进程 Init-->init创建Zygote-->fork出SystemServer。 这里...