系统启动、应用启动、四大组件启动、界面加载、时间分发
google官方android系统架构图
image.png
系统启动过程
image.png
Boot ROM和Boot Loader
RAM:随机存储内存,俗称运行内存,断电内容丢失
ROM:只读内存,俗称硬盘,数据持久化
Boot ROM:长按开机键,执行ROM中预设的代码,加载引导程序到RAM
Boot Loader:执行引导程序检查RAM,初始化硬件参数,准备启动系统
Linux Kernel(硬件驱动)
swagger进程(又称idle进程)(pid=0):初始化进程管理,内存管理;加载驱动程序。
kthreadd进程(pid=2):创建内核工作线程kworkder,软中断线程ksoftirqd,thermal等内核守护进程。
HAL(硬件抽象层)
硬件层的封装,为硬件层的调用提供统一的调用接口
Native系统库和Android Runtime
Native 系统库:包括init孵化的用户守护进程、HAL和开机动画。
1 init进程孵化出ueventd、logd、healthd、installd、adbd、lmkd等用户守护进程
2 init进程还启动 servicemanager(binder服务管家)、 bootanim(开机动画)等重要服务
3 init进程孵化出Zygote进程,Zygote进程是Android系统的第一个Java进程(即虚拟机进程), Zygote是所有Java进程的父进程
Android Runtime(ART)
应用:在自己的进程中运行,有自己的虚拟机实例
DEX文件:Android字节码格式文件
ART:执行DEX,在设备运行多个虚拟机;预先(AOT)和即时(JIT)编译,优化垃圾回收(GC),调试相关支持
Framework
java封装的应用服务,通过调用系统库服务,来实现具体的功能,并对应用层提供统一接口
应用层
应用:每个app都运行在至少一个进程上,有自己的虚拟机实例
桌面应用:即Launcher,Zygote孵化的第一个进程
应用进程:所有的进程都有Zygote创建