本文将带你了解Android应用开发android 启动过程的分析,希望本文对大家学Android有所帮助。
android 启动过程的分析
基本核心过程
引导ROM >引导加载程序 >内核 > init过程> Zygote > Dalvik V M >系统服务器
>管理器
该过程是Android启动的核心过程,下面让我来详细介绍每一步及其并行操作(如果有的话)。
引导ROM
一旦Android操作系统开始运行,就会执行负责“Boot ROM”部分的代码。起始代码恰好是预定义的硬编码位置,代码将引导加载程序加载到RAM中并开始执行。
引导程序
虽然引导程序只是Android系统的一小部分,但却非常重要。你可能已经听说过OEM或制造商放置的某些限制和规则,而引导程序正是存储所有这些“规则”的地方。一开始提到的“引导加载程序”的过程其实包括两个阶段:
第一阶段:检测RAM。引导加载程序检测RAM并执行启动第二步所需的应用程序。
第二步:设置。引导加载程序现在继续设置网络、低级内存管理和安全选项。
这一步对于执行内核至关重要。位于/ bootable / bootloader / legacy /
usbloader的引导加载程序包含两个非常重要的文件,即init.s和main.c。
init.s文件基本上负责的是初始化栈, 0和BSS段,然后继续在main.c.中初始化call_main()。
main.c文件在并行创建Linux标签的同时初始化硬件,特别是时间,控制台和键盘。
内核
Android内核的初始化过程模仿的是Linux内核的初始化,当内核执行时,它将高速缓存,受保护的内存设置为不同的加载驱动程序。当完成所有设置和调度驱动程序后,内核会在系统文件中查找init。
初始化过程
init过程是相当重要的一步,这一步,不仅会安装/ sys和/ dev等目录或分区,还会启动init.rc脚本。 init进程位于/
init,而init.rc脚本位于/ rootdir。
Zygote 和Dalvil VM
Zygote是一个VM进程,会在系统启动时启动。它可以实现Dalvik VM的代码共享,从而有助于把启动时间降至最低。
Zygote还确保更低的内存占用,使Dalvik VM不会消耗大量内存。此外,它还会初始化核心库类。
Zygote加载过程的框架看起来与开头概述的框架完全相同:
加载Zygote init类 > registerZygoteSocket() > preloadClasses() >
preloadResources() >用户看到启动的动画
系统服务器
在这一步,Zygote会要求一个新的过程,这样以下的过程才会启动,处理和执行。
启动电源管理器 >创建活动管理器 >启动电话注册表 >启动包管理器 >将活动管理器服务设置为系统进程 >启动上下文管理器
>启动系统联系人 >启动电池服务 >启动警报管理 >启动 >传感器服务 >启动窗口管理器 >启动蓝牙服务
>启动安装服务 >启动状态栏服务 >启动硬件服务 >启动NetStat服务 >启动连接服务 >启动通知管理器
>启动DeviceStorageMonitor服务 >启动位置管理器 >启动搜索服务 >启动剪贴板服务 >启动检查服务
>启动墙纸服务 >启动音频服务 >启动HeadsetObserver >启动AdbSettingsObserver
>呈现到用户眼前
分析
现在,启动就已经全部完成,与此同时服务已启动并运行,这时,你可能需要了解创建日志的一些方法。
使用adb logca从启动过程获取日志,你可以按照相应顺序输入以下命令:
adb logcat –d –b events | grep “boot”
adb logcat –d | grep preload“`
本文由职坐标整理并发布,希望对同学们有所帮助。