- 浏览: 33477 次
- 性别:
- 来自: 北京
最新评论
原文地址:http://blog.csdn.net/maxleng/article/details/5508372
Android 启动过程详解
Android 从 Linux 系统启动有 4 个步骤;
(1) init 进程启动
(2) Native 服务启动
(3) System Server , Android 服务启动
(4) Home 启动
总体启动框架图如:
第一步:initial 进程 (system/core/init)
init 进程,它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序 init 的方式,完成引导进程。 init 始终是第一个进程 .
I nit.rc
I nit.marvell.rc
Init 进程一起来就根据 init.rc 和 init.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.rc 和 Init.xxxx.rc( 硬件平台相关 )
Init.rc 是 Android 自己规定的初始化脚本 ( 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
( 2 ) restart_service()@ system/core/init/init.c
service_start
execve( … ). 建立 service 进程。
第二步 Zygote
S ervicemanager 和 zygote 进程就奠定了 Android 的基础。 Z ygote 这个进程起来才会建立起真正的 Android 运行空间,初始化建立的 Service 都是 Navtive service. 在 .rc 脚本文件中 zygote 的描述:
service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
所以 Zygote 从 main( … )@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.ZygoteInit : main 函数。
(3) main()@ com.android.internal.os.ZygoteInit // 正真的 Zygote 。
- registerZygoteSocket(); // 登记 Listen 端口
- startSystemServer();
- 进入 Zygote 服务框架。
经过这几个步骤, Zygote 就建立好了,利用 Socket 通讯,接收 ActivityManangerService 的请求, Fork 应用程序。
第三步 System Server
startSystemServer @ com.android.internal.os.ZygoteInit 在 Zygote 上 fork 了一个进程 : 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 )。我们一看这个函数就知道了, i nit1->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 Service 和 AddService 来建立服务
第三步 Home 启动
在 ServerThread@SystemServer.java 后半段,我们可以看到系统在启动完所有的 Android 服务后,做了这样一些动作:
(1) 使用 xxx.systemReady() 通知各个服务,系统已经就绪。
(2) 特别对于 ActivityManagerService.systemReady( 回调 )
W idget.wallpaper,imm( 输入法 ) 等 ready 通知。
Home 就是在 ActivityManagerService.systemReady() 通知的过程中建立的。下面是 ActivityManagerService.systemReady() 的伪代码:
systemReady()@ActivityManagerService.java
resumeTopActivityLocked()
startHomeActivityLocked(); // 如果是第一个则启动 HomeActivity 。
startActivityLocked (。。。) CATEGORY_HOME
发表评论
-
Android核心分析(21)----Android应用框架之AndroidApplication
2012-02-13 14:34 781原文地址:http://blog.csdn ... -
Android核心分析(20)----Android应用程序框架之无边界设计意图
2012-02-13 14:31 901原文地址:http://blog.csdn ... -
Android核心分析(19)----电话系统之GSMCallTacker
2012-02-13 14:25 807原文地址:http://blog.csdn ... -
Android核心分析(18)-----Android电话系统之RIL-Java
2012-02-13 14:10 1146原文地址:http://blog.csdn.net/maxle ... -
Android核心分析(17) ------电话系统之rilD
2012-02-13 14:02 684原文地址:http://blog.csdn.net/maxle ... -
Android核心分析(16)-----Android电话系统-概述篇
2012-01-31 14:39 910原文地址:http://blog.csdn.net/m ... -
Android核心分析(15)--------Android输入系统之输入路径详解
2012-01-31 14:22 840原文地址:http://blog.csdn.net/maxle ... -
Android核心分析(14)------ Android GWES之输入系统
2012-01-31 10:47 955原文地址:http://blog.csdn ... -
Android 核心分析(13) -----Android GWES之Android窗口管理
2012-01-31 10:44 823原文地址:http://blog.csdn ... -
Android 核心分析(12) -----Android GEWS窗口管理之基本架构原理
2012-01-31 10:27 1036原文地址:http://blog.csdn.net/maxle ... -
Android SurfaceFlinger中的SharedClient -- 客户端(Surface)和服务端(Layer)之间的显示缓冲区管理
2012-01-11 11:00 1356原文地址:http://blog.csdn.net/Droid ... -
Android核心分析 之十一-------Android GWES之消息系统
2012-01-10 14:09 676原文地址:http://blog.csdn.net/maxle ... -
Android核心分析 之十-------Android GWES之基本原理篇
2011-12-30 15:08 738原文地址:http://blog.csdn ... -
Android核心分析 之九-------Zygote Service
2011-12-30 15:02 760原文地址:http://blog.csdn.net/maxle ... -
Android 核心分析 之七------Service深入分析
2011-12-30 14:48 1134原文地址:http://blog.csdn.net/maxle ... -
Android 核心分析 之六 -----IPC框架分析 Binder,Service,Service manager
2011-12-30 14:41 940原文地址:http://blog.csdn.net/maxle ... -
Android 核心分析 之五 -----基本空间划分
2011-12-29 11:13 658原文地址:http://blog.csdn.net/maxle ... -
Android核心分析之四 ---手机的软件形态
2011-12-29 11:09 658原文地址:http://blog.csdn.net/maxle ... -
Android是什么 之三-------手机之硬件形态
2011-12-29 11:07 643原文地址:http://blog.csdn.net/maxle ... -
Android核心分析 之二 -------方法论探讨之概念空间篇
2011-12-29 11:03 595原文地址:http://blog.csdn.net/maxle ...
相关推荐
### Android核心分析之Android启动过程详解 Android启动过程是一个复杂且有序的流程,涉及多个关键阶段,从硬件初始化到最终的用户界面呈现。这一过程可以分为四大步骤:init进程启动、Native服务启动、...
Android 核心分析 之八------Android 启动过程详解................................................... 31 Android 核心分析 之九-------Zygote Service...........................................................
Android启动过程详解主要分为四个关键步骤,这四个步骤构建了Android系统的基石。下面将详细阐述这些步骤以及涉及的重要组件。 第一步:初始化init进程 init进程是Android系统启动的第一个用户级进程,由Linux内核...
Android核心分析之八------Android 启动过程详解...................................................31 Android核心分析之九-------ZygoteService.................................................................
核心分析之八 ----- Android 启动过程详解 核心分析之九 ----- Zygote Service 核心分析之十 ----- Android GWES之基本原理篇 核心分析之十一 ----- Android GWES之消息系统 核心分析之十二 ----- Android GWES窗口...
安装过程中,系统会引导用户选择安装路径、设置启动快捷方式等选项,安装完成后,开发者便可以开始使用这个强大的开发工具进行Android应用开发。 总的来说,Android Studio为Android开发者提供了一个全面、高效且...
1. **蓝牙低功耗(BLE)通信**:应用的核心功能之一是通过蓝牙与nRF设备进行通信。源码中,`BluetoothLeService`类负责处理BLE连接和数据交换,实现了GATT(Generic Attribute Profile)协议,允许用户读取、写入和...
**Android核心分析(08):** 对Android系统的启动流程进行了详细的剖析,包括从Zygote进程的初始化到第一个应用的启动全过程。 #### 七、Zygote Service **Android核心分析(09):** Zygote Service是Android系统...
### Android启动过程详解 #### 一、概述 Android操作系统启动过程是一个复杂且精细的过程,它涉及到从硬件层面的初始化到最终用户界面的呈现。整个启动流程可以大致分为以下几个阶段: 1. **init进程启动** 2. **...
《Android Studio 181.5014246 Windows版:一站式移动应用开发环境详解》 Android Studio,作为谷歌官方推荐的Android应用程序开发集成开发环境(IDE),是每一个Android开发者不可或缺的工具。本文将深入探讨...
Android核心分析是关于Android系统的深入研究和分析,涵盖了Android系统的架构设计、核心机制、软件和硬件形态、IPC框架、Service管理、启动过程、窗口管理、输入系统、电话系统、应用程序框架、GDI机制等方面的知识...
[转]Android 核心分析 技术专题之八--Android 启动过程详解
《Android Support Library v7 AppCompat详解》 在Android开发中,`android-support-v7-appcompat`库是一个至关重要的组件,它极大地扩展了Android API的功能,使得开发者能够在更广泛的设备上实现一致的用户界面和...
《Android SDK (SDK Platforms) - android-25详解》 Android SDK(Software Development Kit)是开发者构建、调试和发布Android应用程序的重要工具集。在本文中,我们将深入探讨Android SDK中的"SDK Platforms"-...
- **Android启动过程详解**: - Android系统的启动过程包括Zygote进程的初始化、系统服务的启动、Home Activity的加载等多个阶段。这一过程涉及多个层次的技术细节,包括Linux内核、Dalvik虚拟机、Java框架层等。 ...
本资料集合了"android核心技术与实例详解16-18章PPT"的内容,涵盖了Android系统中的重要知识点,旨在帮助开发者深入理解并熟练运用这些技术。以下是这三章内容的详细解析: 第16章:Android UI系统 在这一章中,...
《Android核心技术与实例详解》是一本专为新手设计的指南,涵盖了Android开发中的核心技术和实践应用。这本书通过详细的章节案例,旨在帮助初学者快速掌握Android编程的基础和高级概念。以下是对书中部分内容的详解...
在本资源中,我们聚焦于Android开发的核心技术和实例解析,主要涵盖了光盘源代码的第13至第18章。这些章节深入探讨了Android应用开发的关键方面,为开发者提供了丰富的学习材料。以下是对各章节内容的详细解读: 第...
很抱歉,根据您提供的信息,"Android核心技术和开发详解-15-18章案例(源代码)"这个标题和描述并没有提供具体的IT知识点内容,它们更像是一个课程或教材的章节结构,而不是具体的技术细节。标签同样如此,它只是对...