Android系统完整的启动过程,从系统层次角度可分为Linux系统层、Android系统服务层、Zygote进程模型三个阶段;从开机到启动Home Launcher完成具体的任务细节可分为七个步骤,下面就从具体的细节来解读Android系统完整的初始化过程。
一、启动BootLoader
Android 系统是基于Linux操作系统的,所以它最初的启动过程和Linux一样。当设备通电后首先执行BootLoader引导装载器,BootLoader是在操作系统内核运行之前运行的一段小程序。通过这段小程序初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境引导进入合适的状态,以便为最终调用操作系统内核准备好正确的运行环境。
而Linux系统启动时:
1) 首先要加载BIOS的硬件信息,并获取第一个启动设备的代号
2) 读取第一个启动设备的MBR的引导加载程序(lilo、grub等)的启动信息。
3) 加载核心操作系统的核心信息,核心开始解压缩,并且尝试驱动所有的硬件设备。
…………
在嵌入式系统中,通常不会有像BIOS那样的固件程序,因此整个系统的加载任务都是通过BootLoader完成的。
二、加载系统内核
Linux内核映像通常包括两部分代码,分别为实模式代码和保护模式代码。当BootLoader装载内核映像到代码段内存时,分别放置实模式代码和保护模式代码到不同的位置,然后进入实模式代码执行,实模式代码执行完成后转入保护模式代码。
实模式和保护模式的概念再次不做过多解释,读者可以自行查阅资料。
三、启动Init进程
当系统内核加载完成之后,会首先启动Init守护进程,它是内核启动的第一个用户级进程,它的进程号总是1。 Init进程启动完成之后,还负责启动其他的一些重要守护进程,包括:
Usbd进程(USB Daemon):USB连接后台进程,负责管理USB连接。
adbd 进程(Android Debug Bridge Daemon):ADB连接后台进程,负责管理ADB连接。
debuggerd 进程(Debugger Daemon) :调试器后台进程,负责管理调试请求及调试过程。
rild进程 (Radio Interface Layer Daemon): 无线接口层后台进程,负责管理无线通信服务。
四、启动Zygote进程
Init进程和一些重要的守护进程启动完成之后,系统启动Zygote 进程。Zygote 进程启动后,首先初始化一个Dalvik VM实例,然后为它加载资源与系统共享库,并开启Socket监听服务,当收到创建Dalvik VM实例请求时,会通过COW(copy on write)技术最大程度地复用自己,生成一个新的Dalvik VM实例。Dalvik VM实例的创建方法基于linux系统的fork原理。
其实,我个人理解,Zygote进程就相当于Linux系统中的fork进程。由它可以在系统运行期间,接收到创建虚拟机请求时,孵化Dalvik VM实例。Zygote进程孵化Dalvik VM实例流程如下图所示:
图1 Zygote进程孵化Dalvik VM实例流程
五、启动Runtime进程
在Zygote进程启动完成之后,Init进程会启动Runtime进程。Runtime进程首先初始化服务管理器(Service Manager),并把它注册为绑定服务(Binder services)的默认上下文管理器,负责绑定服务的注册与查找。然后Runtime进程会向Zygote进程发送启动系统服务(System Service)的请求,Zygote进程收到请求后,会“孵化”出一个新的Dalvik VM实例并启动系统服务进程。Runtime进程的启动流程如下图所示:
图2 Runtime进程启动流程图
六、Step6启动本地服务
System Service会首先启动两个本地服务(由C或C++编写的native服务),Surface Flinger和Audio Flinger,这两个本地系统服务向服务管理器注册成为IPC服务对象,以便在需要它们的时候很容易查找到。然后SystemService 会启动一些 Android 系统管理服务,包括硬件服务和系统框架核心平台服务,并注册它们成为IPC服务对象。本地服务进程的启动流程如下图所示:
图3 SystemService启动本地服务流程图
七、启动Home Laucher
当SystemService加载了所有的系统服务后就意味着系统就准备好了,它会向所有服务发送一个系统准备完毕(systemready) 广播。SystemService系统服务进程的启动流程如图1-6所示。当ActivityManagerService 接收到systemready广播后,会向Zygoute进程发送创建Dalvik 虚拟机实例的请求,Zygoute进程会负责生成一个新的Dalvik 虚拟机实例,然后ActivityManagerService在系统中查找具有<category android:name = "android.intent.category.HOME"/>属性的Activity,并启动它。ActivityManagerService同时也会使用同样的方法启动Contact(联系人)应用程序。
图4 启动Home Laucher流程图
分享到:
相关推荐
此外,还涉及到编译MPSS映像、启动加载程序、安全区域(TZ)映像、RPM包、WCNSS(无线通信子系统)、ADSP(音频数字信号处理器)映像以及应用程序处理器(Android HLOS)等多个组件。每个组件的编译都有详细的步骤...
同时,还会讲解Intent的概念,它是Android系统中组件间通信的主要方式,用于启动其他Activity或Service。 线程管理是Android开发中的重要部分,因为主线程(UI线程)不能执行耗时操作,否则会导致应用无响应。因此...
Android系统开发工程师常常需要深入理解系统的运转过程,而本书所涉及的内容可能正是他们在工作和学习中最想了解的。那些对具体模块(如Audio系统和Surface系统)感兴趣的读者 也可以直接阅读相关章节的内容。 ...
在Android性能测试中,主要关注的是应用的性能表现,包括启动时间、内存管理、CPU使用、GPU效能、功耗和网络流量等方面。测试方法既包括使用第三方工具,也包括利用Android系统内置的功能进行。 首先,启动时间是...
蘑菇街自研了DexDiff/DexMerge算法以支持这一过程。此外,Tinker还支持资源和So包的更新。 然后是基于.class级别的AOP方案Robust,它的兼容性较好,并且下载即生效。但缺点是包的大小和磁盘占用会有影响。Amigo是另...
【微店Android插件化实践】是针对微店App在业务扩展过程中遇到的挑战,如65535方法数限制、模块耦合度高、协作困难和编译时间长等问题,提出的解决方案。插件化旨在提高开发效率,增强系统的稳定性和可维护性。在对...
源码中会包含如何启动、停止录音,以及处理录音过程中可能出现的问题。 3. **音频处理** - 源码可能包含了音频增强算法,如降噪、回声消除等,这些都是通过音频处理库实现的。在MIUI录音机中,可能使用了小米自研...
在这个过程中,一款好用的逆向工具是必不可少的。本文将详细介绍开源的Android逆向工具——jadx-gui-1.2.0-with-jre-win,以及如何在Windows系统中便捷地使用它。 首先,jadx是一款强大的静态反编译器,其设计目标...
- **03-新增自研app保活机制.patch**:可能进一步优化了保活效果,例如改善了内存管理,减少了保活过程中的资源占用,或者增强了系统的兼容性。 4. **Android保活技术**: - **前台服务(Foreground Service)**...
本文将深入解析豆瓣在iOS自动化测试中的具体实践、所采用的工具及其评估过程,以及自研工具Ynm3k的功能与优势。 ### 持续构建iOS应用 豆瓣在iOS应用的持续构建过程中,首先指出了传统测试发布流程中存在的问题。...
同时,需要在 Android 设备或模拟器上安装游戏并启动 GAutomator 服务。 ### 3.2 Getting Started 创建 Python 脚本,引入 GAutomator 库,然后连接到设备上的游戏实例。初始化后,可以开始查找游戏中的元素。 ##...
这一做法不仅允许工程师访问开源项目,如Chrome和Android,还确保对高价值和高安全性代码的严格控制。Google的代码库规模巨大,包含86TB的代码,10亿个文件,超过900万个源代码文件,每天有4万次提交。代码库的读写...
华为荣耀U8860是一款深受用户喜爱的智能手机,它搭载了华为自研的海思K3V2处理器,运行Android操作系统。"ROOT"在安卓系统中是一个特殊的概念,指的是获取设备的超级用户权限,这使得用户可以深度定制手机系统,安装...
- QZone解决方案(如Nuwa):基于Android ClassLoader机制,可靠性高,但可能影响启动速度。 2. **Android**: - 微信Tinker:采用自研的dxdiff算法,支持代码、SO库和资源修复,全平台兼容,但可能占用ROM空间...
为了提升性能和稳定性,支付宝在启动治理、基础性能优化、网络优化等方面下足了功夫。例如,通过AOP(面向切面编程)进行耗时统计,找出性能瓶颈,利用MMTP协议(包括0RTT握手协议、Protobuf数据格式等)优化网络...
网狐服务器以其稳定性、高质量代码和开源特性受到赞誉,但它的移动客户端开发稍显滞后,需要使用C++、Java和Objective-C三种语言来支持Android、iOS和PC平台。2016年,网狐推出了基于cocos2d的客户端,但Unity对接的...
该软件采用了Electron框架,结合自研的编译器和运行环境,实现了更快的启动速度和更高的运行效率。此外,HBuilderX还支持热更新,这意味着在开发过程中,修改的代码可以立即生效,无需频繁重启应用,进一步提升了...
1. **高速连接**:AnyDesk 采用了自研的DeskBand技术,提供了几乎无延迟的远程桌面体验,无论网络条件如何,都能确保流畅的操作。 2. **跨平台支持**:支持Windows、macOS、Linux、iOS和Android等操作系统,使您...