Android是一個非常龐大,非常復(fù)雜的系統(tǒng)工程,通過系統(tǒng)調(diào)用(Syscall)連通系統(tǒng)的用戶空間和系統(tǒng)空間,通過JNI(Java Native Interface)連接用戶空間中的Java層和Native層(C++/Java)。
Google官方發(fā)布的Android四層架構(gòu)圖,將Android按照模塊自下而上分為Linux Kernel(Drivers)、Libraries(Android Runtime)、Application Framework(Managers)、Application。
GitYuan將Android框架按照進程的啟動視角分為Loader、Kernel、Native、Framework、App五層。
1、Loader:
Boot ROM:當手機處于關(guān)機狀態(tài),長安電源將i難道芯片執(zhí)行固化在ROM內(nèi)的內(nèi)的代碼,并加載引導(dǎo)程序到RAM中;
Boot Loader:啟動Android系統(tǒng)之前的引導(dǎo)程序,主要是檢查RAM、初始化硬件參數(shù)。
2、Kernel:
啟動Kernel的Swapper進程(pid=0),初始化內(nèi)存管理、進程管理/加載Driver;
啟動Kernel的kthreadd進程(pid=2),該進程是內(nèi)核進程,創(chuàng)建內(nèi)核工作線程kworkder、軟中斷線程ksoftirqd、thermal等內(nèi)核守護線程。kthreadd進程是所有內(nèi)核進程的鼻祖。
3、Native:
包括init孵化而來的用戶空間的守護進程、HAL層以及開機動畫等。init進程的pid=1.init進程是所有用戶進程的鼻祖。
init進程孵化出Zygote進程,Zygote進程是Android系統(tǒng)的第一個Java進程(即虛擬機進程),Zygote是所有Java進程的父進程。
4、framework:
Zygote進程,是由init進程孵化而來的進程,是所有java層進程的母體,所有的java層進程都是由Zygote孵化而來的。
System Server進程
Media Server進程
5、App層:
Zygote進程孵化出的第一個App進程是Launcher,這是用戶看到的桌面App;
Zygote進程還會創(chuàng)建Browser,Phone,Email等App進程,每個App至少運行在一個進程上。
所有的App進程都是由Zygote進程fork生成的。
通信方式:
IPC(Inter-Process Communication,進程間通信),Linux目前有管道、消息隊列、共享內(nèi)存、套接字、信號量、信號通信方式,Android額外提供Binder通信方式。
Binder/Socket用于進程間通信,而Handler消息機制用于同進程的線程間通信。