Android是一个非常庞大,非常复杂的系统工程,通过系统调用(Syscall)连通系统的用户空间和系统空间,通过JNI(Java Native Interface)连接用户空间中的Java层和Native层(C++/Java)。
Google官方发布的Android四层架构图,将Android按照模块自下而上分为Linux Kernel(Drivers)、Libraries(Android Runtime)、Application Framework(Managers)、Application。
GitYuan将Android框架按照进程的启动视角分为Loader、Kernel、Native、Framework、App五层。
1、Loader:
Boot ROM:当手机处于关机状态,长安电源将i难道芯片执行固化在ROM内的内的代码,并加载引导程序到RAM中;
Boot Loader:启动Android系统之前的引导程序,主要是检查RAM、初始化硬件参数。
2、Kernel:
启动Kernel的Swapper进程(pid=0),初始化内存管理、进程管理/加载Driver;
启动Kernel的kthreadd进程(pid=2),该进程是内核进程,创建内核工作线程kworkder、软中断线程ksoftirqd、thermal等内核守护线程。kthreadd进程是所有内核进程的鼻祖。
3、Native:
包括init孵化而来的用户空间的守护进程、HAL层以及开机动画等。init进程的pid=1.init进程是所有用户进程的鼻祖。
init进程孵化出Zygote进程,Zygote进程是Android系统的第一个Java进程(即虚拟机进程),Zygote是所有Java进程的父进程。
4、framework:
Zygote进程,是由init进程孵化而来的进程,是所有java层进程的母体,所有的java层进程都是由Zygote孵化而来的。
System Server进程
Media Server进程
5、App层:
Zygote进程孵化出的第一个App进程是Launcher,这是用户看到的桌面App;
Zygote进程还会创建Browser,Phone,Email等App进程,每个App至少运行在一个进程上。
所有的App进程都是由Zygote进程fork生成的。
通信方式:
IPC(Inter-Process Communication,进程间通信),Linux目前有管道、消息队列、共享内存、套接字、信号量、信号通信方式,Android额外提供Binder通信方式。
Binder/Socket用于进程间通信,而Handler消息机制用于同进程的线程间通信。