Linux系統的啓動過程,在該過程的最後,內核將讀取initrc文件,因爲Android系統相對於Linux內核而言僅僅是一個Linux應用程序而已,所以,安卓的啓動也是在init.rc中被聲明。shell
Linux系統中運行的第一個Dalvik虛擬機程序叫作zygote,接下來的全部Dalvik虛擬機進程都是經過這個「 卵」 孵化出來的。架構
zygote進程app
包含兩個主要模塊工具
Socket服務端:該Socket服務端用於接收啓動新的Dalvik進程的命令。線程
Framework共享類及共享資源:zygote進程預先會裝載共享類和共享資源,這些類及資源實際上就是SDK中定義的大部分類和資源blog
zygote孵化出的第一個Dalvik進程叫作SystemServer進程
SystemServer中建立了一個Socket客戶端,並有AmS負責管理該客戶端,以後全部的Dalvik進程都將經過該Socket客戶端間接被啓動。資源
當須要啓動新的APK進程時,AmS中會經過該Socket客戶端向zygote進程的Socket服務端發送一個啓動命令,而後zygote會孵化出新的進程。(使用fo lk 啓動新的進程)虛擬機
從系統架構的角度來說,就在於此即先建立一個zygote,並加載共享類和資源,而後經過該zygote,去孵化新的Dalvik進程。
it
dx工具
$ adb push foo.jar /data/app 裝載到目錄
$ adb shell dalvikvm -cp /data/app/foo.j ar Foo 運行
SystemServer進程
SystemServer進程在Android的運行環境中扮演了 「神經中樞」 的做用,APK應用中可以直接交互的大部分系統服務都在該進程中運行, 常見的好比WindowManagerServer ( Wms ) 、
ActivityManagerSystemService (AmS)、PackageManagerServer (PmS) 等,這些系統服務都是以一個線程的方式存在於SystemServer進程中。
AMS啓動第一個activity的過程。
其實AMS啓動第一個activity就是去activity棧中去讀取第一個activity,因此用戶能夠自動的靈活的進行配置。
若是棧中沒有activity系統則系統發出 了一個 catagory 字段包含 CATEGORY—HOME的intent。只要用戶本身去響應便可。
若是有多個響應,系統會讓用戶進行選擇。