愛悠閑 > Android編譯和運行原理(2)

Android編譯和運行原理(2)

分類: Android  |  標簽: 編譯原理  |  作者: maximuskiang 相關  |  發布日期 : 2015-05-06  |  熱度 : 73°

From:鏈接地址

上篇介紹了應用程序從源碼到安裝包的整個過程,考慮到篇幅過長,遂將原理內容分成兩部分來介紹。接下來,在本篇中,主要介紹Android平臺應用程序的運行原理。

      在閱讀了SDK文檔中“Application Fundamentals”一篇的內容后,根據自己的理解繪制了下面的示意圖:

Android應用程序運行原理圖

      每個應用程序安裝后,系統便會為其分配一個獨立的存儲空間,所謂的“Security Sandbox”,用于存放字節碼文件、資源文件及配置文件等,同時,系統會為每一個應用程序分配唯一的ID,用以標識該應用程序的相關文件和資源,系統通過設置權限從而實現一個應用程序在一般情況下只能訪問該應用程序的文件和資源。當應用程序或者它的某個組件需要運行時,系統便為其創建一個Linux進程,每個進程中實例化一個Dalvik虛擬機用以執行程序的字節碼。程序運行中根據給自己設定的權限來訪問相應的資源。這樣的設計保證了應用程序間的獨立性和安全性,但是,應用程序常常要訪問其他應用程序的數據或者訪問系統資源,為此,Android平臺提供了兩種方式來實現這一目的:
(1)可以安排兩個應用程序共享一個ID,從而可以彼此訪問對方的文件;還可以安排兩個應用程序在一個進程中運行,并共享一個虛擬機
(2)應用程序在安裝時,可以通過使用者來設置權限,根據設置的權限應用程序可以發起訪問系統資源和數據的請求。

---------------------------------------------------------------------------------------------------------------------------------------------------

了解應用程序運行原理的目的是為了構建應用程序,因此了解上述內容是遠遠不夠的,如果把上述內容理解成物理結構,那么下面所講的便是以構成應用程序的基本組件為主的邏輯結構。

Android應用程序主要由四種不同類型的組件組成,分別是Activity(活動)、Service(服務)、Content Provider(內容提供者)和Broadcast Receiver(廣播接收者):

◆Activity是一個顯示在設備屏幕上的用戶界面組件,有點兒類似視圖(View)。一個應用程序可以包含多個Activity來呈現其不同的功能界面。在某一個程序允許的前提下,另一個程序可以啟動該程序中的一個Activity來完成相應的功能。

◆Service是一個在后臺運行的,沒有用戶界面,用以執行運行周期較長的操作或者執行遠程進程的任務的組件。Activity可以啟動一個Service并與其綁定用以實現二者之間的交互。

◆Content Provider是一個用于數據共享的組件。無論應用程序是以何種數據持久化形式保存的數據,通過Content Provider組件,其他應用程序可以訪問或修改該應用程序的數據。

◆Broadcast Receiver是一個相應系統范圍內的廣播消息的組件。廣播以Intent對象的形式發送,Broadcast Receiver接收后根據其內容作出相應操作。

Android系統這樣設計的目的就是凸顯組件的復用性,當一個程序需要使用另一個程序的組件時,首先需要向系統發送一個Intent來表明你的意圖,系統根據權限設定,在允許的條件下,將組件所在的應用程序的進程啟動,組件對應的類被實例化,組件執行完需要的功能后,將結果返回到調用該組件的應用程序,所以,Android應用程序與其他系統的應用程序不同,即沒有單一的入口(例如Main函數)。對于組件激活的方式,不同的組件有不同的方式。其中,Activity、Service和Broadcast Receiver是被所謂“Intent”的異步消息激活的,Intent將獨立的組件進行綁定;Content Provider是被來自Content Resolver的請求激活的。

      根據上述內容,結合自己的理解,將Android應用程序創建和運行的過程用下圖描繪:

      上述內容主要是對原理的宏觀描述,可能看著有點兒暈,后續的博文會結合具體的實例程序來詳細介紹。同時,這些畢竟是個人理解的結果,可能會有不少內容描述不準確,希望各位經驗豐富者積極指正,謝謝!



快乐彩中奖说明