## 一、系統框架

1.Anroid大致分為四層結構,五塊區域
1)應用程序層(Applications)
所有安裝在手機上的應用程序都屬于這一層。
2)應用程序框架(Application Framework)
提供大量的API供開發人員使用,Android自帶的一些核心應用就是使用這些API完成的。
3)函數庫(Libraries)
—Surface Manager:管理對顯示子系統的訪問,并可以對多個應用程序的2D和3D圖層機提供無縫整合
—Media Framework:基于PacketVideo的OpenCORE,支持播放和錄制多種流行的音頻和視頻格式,以及查看靜態圖片
—SQLite提供數據庫的支持
—OpenGL|ES提供3D繪圖的支持
—FreeType:位圖和向量字體顯示
—WebKit:Web瀏覽器引擎,為Android瀏覽器提供支持
—SGL:底層的2D圖形引擎
—SSL:在Android中通信實現握手
—C/C++(libc)庫來為Android系統提供了主要的特性支持
4)運行時(Android Runtime)
由兩部分組成:Android核心庫集和Dalvik虛擬機。核心庫集提供了Java語言核心庫所能使用的絕大部分功能,Dalvik虛擬機負責運行Android應用程序。
5)Linux內核
Linux內核提供安全性、內存管理、進程管理、網絡協議棧和驅動模型等核心系統服務,Linux內核也是系統硬件和軟件疊層之間的抽象層。
## 二、JVM和DalvikVM的區別
DalvikVM:
Dalvik虛擬機是Google的用于移動設備的Android平臺的一個主要部分。虛擬機可運行Java平臺應用程序,這些應用程序被轉換成緊湊的Dalvik可執行格式(.dex),該格式適合內存和處理器速度受限的系統。



**區別:**
1.Dalvik并未完全遵守JVM規范,兩者也不兼容。
2.JVM虛擬機運行的是字節碼,Dalvik運行的是其專有的dex(Dalvik Executable)文件。
3.JVM直接從.class文件或者jar包中加載字節碼然后運行,而Dalvik則無法從.class文件或jar包中加載字節碼,而是通過DX工具將應用程序所欲的.class文件編譯成.dex文件,然后運行.dex文件。
4.Dalvik 基于寄存器,而 JVM 基于棧。基于寄存器的虛擬機對于更大的程序來說,在它們編譯的時候,花費的時間更短。
5.Dalvik負責進程隔離和線程管理,每一個Android應用在底層都會對應一個獨立的Dalvik虛擬機實例,其代碼在虛擬機的解釋下得以執行。
