`

android 启动过程

 
阅读更多
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操作系统启动过程是一个复杂且精细的过程,它涉及到从硬件层面的初始化到最终用户界面的呈现。整个启动流程可以大致分为以下几个阶段: 1. **init进程启动** 2. **...

    Android 启动过程相关资料

    Android启动过程是一个复杂而有序的系统初始化阶段,涵盖了操作系统内核加载、系统服务启动、用户界面呈现等多个步骤。在这个过程中,Makefile起着至关重要的作用,它是构建Android系统的基石之一。 首先,Android...

    Android启动过程分析

    ### Android启动过程深入解析 Android启动过程是操作系统与硬件初始化、系统服务启动及应用程序环境建立的复杂流程。本文将从Init进程的启动入手,详细解析Android设备如何从电源开启到用户界面呈现的整个过程。 #...

    Android启动过程详解[借鉴].pdf

    Android 启动过程详解 Android 启动过程可以分为四个步骤:init 进程启动、Native 服务启动、System Server 启动和 Home 启动。 第一步:init 进程启动 init 进程是 Android 启动的第一个进程,由内核启动的用户...

    android 核心分析之------Android 启动过程详解

    ### Android核心分析之Android启动过程详解 Android启动过程是一个复杂且有序的流程,涉及多个关键阶段,从硬件初始化到最终的用户界面呈现。这一过程可以分为四大步骤:init进程启动、Native服务启动、...

    android核心分析之------Android启动过程详解.pdf

    Android启动过程详解主要分为四个关键步骤,这四个步骤构建了Android系统的基石。下面将详细阐述这些步骤以及涉及的重要组件。 第一步:初始化init进程 init进程是Android系统启动的第一个用户级进程,由Linux内核...

    android启动流程

    android启动流程,以uml图的方式显示了android的启动流程

    Android_启动过程分析

    下面是详细的Android启动过程分析: 1. **Bootloader阶段**: Bootloader是设备启动时运行的第一段软件,通常由制造商定制,负责加载Linux内核。Bootloader如uboot,会检查设备状态,加载必要的固件,然后将控制权...

    Android 启动过程分析

    此文档是根据sundy讲解的android启动视频而进行整理的,主要是跟踪andoird的系统开机过程,

    浅谈android性能优化之启动过程(冷启动和热启动)

    Android 应用程序启动优化之冷启动和热启动详解 一、应用程序启动方式 ...了解 Android 应用程序的启动过程对于优化应用程序的性能非常重要,可以根据应用程序的启动方式和启动过程来进行相应的优化处理。

    android启动优化.pdf

    ### Android启动过程优化详解 #### 一、Android启动过程概览 Android的启动过程是一个复杂且有序的过程,涉及多个核心组件和服务的初始化。下面将详细解释Android启动过程的关键步骤。 ##### 1. Init进程的启动 ...

    android启动源代码分析(init.c)

    Android启动源代码分析是一个深入探讨Android系统启动机制的重要途径,本文将重点分析Android启动过程中的关键源代码文件init.c,该文件位于system/core/init目录下,主要负责启动和管理系统进程,以及解析init.rc...

    Android_开机启动流程

    - [Android启动过程详解](http://blog.csdn.net/basonjiang_sz/category/648399.aspx) Android从Linux系统启动的过程大致分为以下几个步骤: 1. `init`进程启动 2. Native服务启动 3. `SystemServer`启动 4. 应用...

Global site tag (gtag.js) - Google Analytics