Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 初級開發 >> Android核心分析 Zygote Service

Android核心分析 Zygote Service

編輯:初級開發

在本章我們會接觸到這兩個單詞:

Zygote [生物] 受精卵, 接合子, 接合體

Spawn:產卵

通過這兩個單詞,我們就可以大體知道Zygote是干什麼的了,就是叫老母雞下蛋。通過“Zygote”產出不同的子“Zygote”。從大的架構上講,Zygote是一個簡單的典型C/S結構。其他進程作為一個客服端向Zygote發出”孵化”請求,Zygote接收到命令就“孵化”出一個Activity進程來。

Zygote系統代碼組成及其調用結構:

Zygote.Java

提供訪問Dalvik “zygote”的接口。主要是包裝Linux系統的Fork,以建立一個新的VM實例進程。

ZygoteConnection.Java

Zygote的套接口連接管理及其參數解析。其他Actvitiy建立進程請求是通過套接口發送命令參數給Zygote。

ZygoteInit.Java

Zygote的main函數入口。

Zygote系統代碼層次調用

main()

Startsystemserver()…

RunSelectLoopMode()

Accept socket connection

Conntecion.RunOnce()

Read argument

folkAndSpecialize

folkAndSpecialize使用Native函數Dalvik_dalvik_system_Zygote_forkAndSpecialize

//native 的獲取

dalvikvm ative

//dalvik_system_Zygote.c

const DalvikNativeMethod dvm_dalvik_system_Zygote[] = {

{ "fork", "()I",

Dalvik_dalvik_system_Zygote_fork },

{ "forkAndSpecialize", "(II[II[[I)I",

Dalvik_dalvik_system_Zygote_forkAndSpecialize },

{ "forkSystemServer", "(II[II[[I)I",

Dalvik_dalvik_system_Zygote_forkSystemServer },

{ NULL, NULL, NULL },

};

在這裡我們就有了Zygote服務的全貌理解,也在Code中印證了,Activity在本質上是個什麼東西,就是一個Linux進程。但是不是一個簡單的Linux進程,畢竟Activity是在Andoid概念空間中才有效的。在這個概念空間中,Activity被包裝,在屏幕上呈現UI,用戶看到的整個屏幕或者一個窗口,對於機器來講,呈現在用戶面前的就叫Actvitiy。從分析中我們可以看到,android使用了Linux的fork機制。在Linux中Fork是很高效的。

一個android的Activity實際上一個Linux進程,所謂進程具備下面幾個要素,

a.要有一段程序供該進程運行,程序是可以被多個進程共享的。

b..進程專用的系統堆棧空間。

c.進程控制塊,在Linux中具體實現是task_struct

d.有獨立的存儲空間。

fork 創造的子進程復制了父親進程的資源,包括內存的內容task_struct內容,在復制過程中,子進程復制了父進程的task_struct,系統堆棧空間和頁面表,而當子進程改變了父進程的變量時候,會通過copy_on_write的手段為所涉及的頁面建立一個新的副本。所以只有子進程有改變變量時,子進程才新建了一個頁面復制原來頁面的內容,基本資源的復制是必須的,整體看上去就像是父進程的獨立存儲空間也復制了一遍。

再看看下面Google在講解Dalvik虛擬機的圖片,我們就大體有了android系統中Actvitiy的實際映射狀態有了基本的認識。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved