安卓運行環境(四)

 

 

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。只要用戶本身去響應便可。

若是有多個響應,系統會讓用戶進行選擇。

相關文章
相關標籤/搜索