android系統啟動架構、Activity介面顯示過程詳解

來源:互聯網
上載者:User

標籤:研究   其他應用   內容提供者   返回   message   其他   ini   csdn   開發人員   

一、Android系統架構

      android的系統架構和其作業系統一樣,採用了分層的架構。從架構圖看,android分為四個層,從高層到低層分別是應用程式層、應用程式架構層、系統運行庫層和linux核心層。盜圖如下:

                

具體每層的功能介紹如下:

     (1) 應用程式層

      該層提供一些核心應用程式套件組合,例如電子郵件、簡訊、日曆、地圖、瀏覽器和連絡人管理等。同時,開發人員可以利用Java語言設計和編寫屬於自己的應用程式,而這些程式與那些核心應用程式彼此平等、友好共處。

     (2)應用程式架構層

     該層是Android應用開發的基礎,開發人員大部分情況是在和她打交道。應用程式架構層包括Active Manager、視窗管理器、內容提供者、視圖系統、包管理器、電話管理器、資源管理員、位置管理器、通知管理器和XMPP服務十個部分。在Android平台上,開發人員可以完全訪問核心應用程式所使用的API架構。並且,任何一個應用程式都發行就緒自身的功能模組,而其他應用程式則可以使用這些發行的功能模組。基於這樣的重用機制,使用者就可以方便地替換平台本身的各種應用程式組件。

     (3) 系統庫和Android運行時

     系統庫包括九個子系統,分別是圖層管理、媒體庫、SQLite、OpenGLEState、FreeType、WebKit、SGL、SSL和libc。Android運行時包括核心庫和Dalvik虛擬機器,前者既相容了大多數Java語言所需要調用的功能函數,又包括了Android的核心庫,比如android.os、android.net、android.media等等。後者是一種基於寄存器的java虛擬機器,Dalvik虛擬機器主要是完成對生命週期的管理、堆棧的管理、線程的管理、安全和異常的管理以及記憶體回收等重要功能。

     (4) Linux核心

     Android核心系統服務依賴於Linux2.6核心,如安全性、記憶體管理、進程管理、網路通訊協定棧和驅動模型。Linux核心也是作為硬體與軟體棧的抽象層。驅動:顯示驅動、網路攝影機驅動、鍵盤驅動、WiFi驅動、Audio驅動、flash記憶體驅動、Binder(IPC)驅動、電源管理等。

      Android的系統架構採用分層架構的思想,架構清晰,層次分明,協同工作。因此,若想從事Android應用開發,則研究研究Android的應用程式框架層和應用程式層;若想從事Android系統開發,那研究下Android系統庫和Android運行時;若想從事Android驅動開發,那試著看看Android的Linux核心。下面分別介紹android系統啟動流程和Activity介面顯示流程:

二、Android系統啟動流程

      眾所周知,在Linux中,它的啟動可以歸為一下幾個流程: Boot Loader——>初始化核心——>建立init進程——>根據inittable檔案執行其他的啟動項——>..... 。

      由此可知,當初始化核心之後,就會啟動一個相當重要的祖先進程,也就是init進程,在Linux中所有的進程都是由init進程直接或間接fork出來的。而對於Android來說,前面的流程都是一樣的:

 (1)當init進程建立之後,會fork出一個Zygote進程,這個進程是所有Java進程的父進程。我們知道,Linux是基於C的,而Android是基於Java的(當然底層也是C);

 (2)然後fork出一個Zygote Java進程用來fork出其他的進程。當Zygote(孵化進程)被初始化的時候,會fork出System Server進程,這個進程在整個的Android進程中是非常重要的一個,地位和Zygote等同,它是屬於Application Framework層的,Android中的所有服務,例如AMS, WindowsManager, PackageManagerService等等都是由這個SystemServer fork出來的。所以它的地位可見一斑;

 (3)當System Server進程開啟的時候,就會初始化AMS,同時,會載入本地系統的服務庫,建立系統上下文,建立ActivityThread及開啟各種服務等等。而在這之後,就會開啟系統的Launcher程式,完成系統介面的載入與顯示;

 (4)系統啟動完成後,當我們點擊螢幕時,觸控螢幕的兩層電極會串連在一起,也就產生了一個電壓並通過對應的驅動把當前按壓點的XY座標傳給android系統。系統在擷取到XY值的時候,就會對按壓點的範圍進行一個判斷,如果確定按壓點處於一個APP表徵圖或者是Button等等的範圍中時,作業系統也就會認為使用者當前已經點擊了這個東西,啟動對應的監聽。而當系統判斷我們點擊的是APP表徵圖時,該App就由Launcher開始啟動了;

  (5)當開始啟動時,Launcher進程會採用Binder的方式向AMS(Activity Manager Server)發出startActivity請求;

  (6)AMS在接收到請求之後,就會通過Socket向Zygote進程發送建立進程的請求;

  (7)Zygote進程會fork出新的子進程(APP進程);

  (8)隨後APP進程會再向AMS發起一次請求,AMS收到之後經過一系列的準備工作再回傳請求;

  (9)APP進程收到AMS返回的請求後,會利用Handler向主線程(即UI線程)發送LAUNCH_ACTIVITY訊息;

註:主線程(也即ActivityThread)裡面存在一個main()方法,這也是APP的真正入口,當APP啟動時,就會啟動ActivityThread中的main方法,在main方法中系統會通過Looper.prepareMainLooper()來建立主線程的Looper以及MessageQueue,並通過Looper.loop來開啟訊息迴圈。

 (10)主線程在收到訊息之後,就建立目標Activity,並回調onCreate()/onStart()/onResume()等方法,UI渲染結束後便可以看到App主介面。

三、介面顯示流程

  

 

 

 

android系統啟動架構、Activity介面顯示過程詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.