`

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

 
阅读更多

Android 启动过程详解

 

AndroidLinux系统启动有4个步骤;

(1) init进程启动

(2) Native服务启动

(3) System ServerAndroid服务启动

(4) Home启动

总体启动框架图如:

 

image

 

 

第一步:initial进程(system/core/init)

 

     init进程,它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。init始终是第一个进程.

Init.rc

Init.marvell.rc


 

 

Init进程一起来就根据init.rcinit.xxx.rc脚本文件建立了几个基本的服务:

  •  servicemanamger
  •  zygote

。。。

最后Init并不退出,而是担当起property service的功能。

1.1脚本文件

init@System/Core/Init

Init.c: parse_config_file(Init.rc)

    @parse_config_file(Init.marvel.rc)

解析脚本文件:Init.rcInit.xxxx.rc(硬件平台相关)

Init.rcAndroid自己规定的初始化脚本(Android Init Language, System/Core/Init/readme.txt)

该脚本包含四个类型的声明:

  • Actions
  • Commands
  • Services
  • Options.

1.2 服务启动机制

我们来看看Init是这样解析.rc文件开启服务的。

1)打开.rc文件,解析文件内容@ system/core/init/init.c

service信息放置到service_list中。@ system/core/init parser.c

2restart_service()@ system/core/init/init.c

service_start

execve().建立service进程。

第二步 Zygote

Servicemanagerzygote进程就奠定了Android的基础。Zygote这个进程起来才会建立起真正的Android运行空间,初始化建立的Service都是Navtive service..rc脚本文件中zygote的描述:

service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server

所以Zygotemain()@frameworks/base/cmds/app_main.cpp开始。

(1) main()@frameworks/base/cmds/app_main.cpp

  • 建立Java Runtime
  • runtime.start("com.android.internal.os.ZygoteInit", startSystemServer);

(2) runtime.start@AndroidRuntime.cpp

  • 建立虚拟机
  • 运行:com.android.internal.os.ZygoteInitmain函数。

(3)main()@com.android.internal.os.ZygoteInit//正真的Zygote

  • registerZygoteSocket();//登记Listen端口
  • startSystemServer();
  • 进入Zygote服务框架。

经过这几个步骤,Zygote就建立好了,利用Socket通讯,接收ActivityManangerService的请求,Fork应用程序。

第三步 System Server

startSystemServer@com.android.internal.os.ZygoteInitZygotefork了一个进程: com.android.server.SystemServer.于是SystemServer@(SystemServer.java就建立了。Android的所有服务循环框架都是建立SystemServer@(SystemServer.java)上。在SystemServer.java中看不到循环结构,只是可以看到建立了init2的实现函数,建立了一大堆服务,并AddService到service Manager。

main() @ com/android/server/SystemServer

{

init1();

}

Init1()是在Native空间实现的(com_andoird_server_systemServer.cpp)。我们一看这个函数就知道了,init1->system_init() @System_init.cpp

system_init()我们看到了循环闭合管理框架。

{

Call "com/android/server/SystemServer", "init2"

…..

ProcessState::self()->startThreadPool();

     IPCThreadState::self()->joinThreadPool();

}


init2()@SystemServer.java中建立了Android中所有要用到的服务。

这个init2()建立了一个线程,来New ServiceAddService来建立服务


第三步 Home启动

ServerThread@SystemServer.java后半段,我们可以看到系统在启动完所有的Android服务后,做了这样一些动作:

(1) 使用xxx.systemReady()通知各个服务,系统已经就绪。

(2)  特别对于ActivityManagerService.systemReady(回调)

Widget.wallpaper,imm(输入法)ready通知。

Home就是在ActivityManagerService.systemReady()通知的过程中建立的。下面是ActivityManagerService.systemReady()的伪代码:

systemReady()@ActivityManagerService.java

resumeTopActivityLocked()

startHomeActivityLocked();//如果是第一个则启动HomeActivity

startActivityLocked(。。。)CATEGORY_HOME

分享到:
评论

相关推荐

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

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

    android 核心分析

    Android 核心分析 之八------Android 启动过程详解................................................... 31 Android 核心分析 之九-------Zygote Service...........................................................

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

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

    Android核心设计思想分析

    Android核心分析之八------Android 启动过程详解...................................................31 Android核心分析之九-------ZygoteService.................................................................

    [经典文档]Android核心分析

    核心分析之八 ----- Android 启动过程详解 核心分析之九 ----- Zygote Service 核心分析之十 ----- Android GWES之基本原理篇 核心分析之十一 ----- Android GWES之消息系统 核心分析之十二 ----- Android GWES窗口...

    android-studio-ide-192.6392135-windows.rar

    安装过程中,系统会引导用户选择安装路径、设置启动快捷方式等选项,安装完成后,开发者便可以开始使用这个强大的开发工具进行Android应用开发。 总的来说,Android Studio为Android开发者提供了一个全面、高效且...

    Android-nRF-Toolbox-master 源码

    1. **蓝牙低功耗(BLE)通信**:应用的核心功能之一是通过蓝牙与nRF设备进行通信。源码中,`BluetoothLeService`类负责处理BLE连接和数据交换,实现了GATT(Generic Attribute Profile)协议,允许用户读取、写入和...

    android核心分析pdf

    **Android核心分析(08):** 对Android系统的启动流程进行了详细的剖析,包括从Zygote进程的初始化到第一个应用的启动全过程。 #### 七、Zygote Service **Android核心分析(09):** Zygote Service是Android系统...

    android-studio-ide-181.5014246-windows.exe

    《Android Studio 181.5014246 Windows版:一站式移动应用开发环境详解》 Android Studio,作为谷歌官方推荐的Android应用程序开发集成开发环境(IDE),是每一个Android开发者不可或缺的工具。本文将深入探讨...

    Android 启动过程详解

    ### Android启动过程详解 #### 一、概述 Android操作系统启动过程是一个复杂且精细的过程,它涉及到从硬件层面的初始化到最终用户界面的呈现。整个启动流程可以大致分为以下几个阶段: 1. **init进程启动** 2. **...

    Android核心分析-050417421

    Android核心分析是关于Android系统的深入研究和分析,涵盖了Android系统的架构设计、核心机制、软件和硬件形态、IPC框架、Service管理、启动过程、窗口管理、输入系统、电话系统、应用程序框架、GDI机制等方面的知识...

    Android 核心分析8

    [转]Android 核心分析 技术专题之八--Android 启动过程详解

    android-support-v7-appcompat.rar

    《Android Support Library v7 AppCompat详解》 在Android开发中,`android-support-v7-appcompat`库是一个至关重要的组件,它极大地扩展了Android API的功能,使得开发者能够在更广泛的设备上实现一致的用户界面和...

    Android SDK (SDK Platforms)-android-25.zip

    《Android SDK (SDK Platforms) - android-25详解》 Android SDK(Software Development Kit)是开发者构建、调试和发布Android应用程序的重要工具集。在本文中,我们将深入探讨Android SDK中的"SDK Platforms"-...

    android核心分析

    - **Android启动过程详解**: - Android系统的启动过程包括Zygote进程的初始化、系统服务的启动、Home Activity的加载等多个阶段。这一过程涉及多个层次的技术细节,包括Linux内核、Dalvik虚拟机、Java框架层等。 ...

    android核心技术与实例详解16-18章PPT

    本资料集合了"android核心技术与实例详解16-18章PPT"的内容,涵盖了Android系统中的重要知识点,旨在帮助开发者深入理解并熟练运用这些技术。以下是这三章内容的详细解析: 第16章:Android UI系统 在这一章中,...

    Android核心技术与实例详解-各章案例

    《Android核心技术与实例详解》是一本专为新手设计的指南,涵盖了Android开发中的核心技术和实践应用。这本书通过详细的章节案例,旨在帮助初学者快速掌握Android编程的基础和高级概念。以下是对书中部分内容的详解...

    android核心技术与实例详解光盘源代码3

    在本资源中,我们聚焦于Android开发的核心技术和实例解析,主要涵盖了光盘源代码的第13至第18章。这些章节深入探讨了Android应用开发的关键方面,为开发者提供了丰富的学习材料。以下是对各章节内容的详细解读: 第...

    Android核心技术和开发详解-15-18章案例(源代码)

    很抱歉,根据您提供的信息,"Android核心技术和开发详解-15-18章案例(源代码)"这个标题和描述并没有提供具体的IT知识点内容,它们更像是一个课程或教材的章节结构,而不是具体的技术细节。标签同样如此,它只是对...

Global site tag (gtag.js) - Google Analytics