Android應用是使用Java程式設計語言編寫的。Android SDK工具把代碼、資源和資料檔案編譯為一個Android包,這是一個有.apk尾碼的壓縮檔。一個單獨的.apk檔案裡包含所有的代碼,這被當作一個應用,而且這個.apk檔案是Android裝置用來安裝應用的檔案。
一旦在裝置上安裝了應用,那麼每個應用都在自已安全的沙箱裡運行:
1. Android作業系統是一個多使用者的Linux作業系統,在這個系統裡,每個應用都是一個不同的使用者。
2. 預設地,系統把每一個應用都標識為一個獨一無二的Linux使用者ID(這個ID僅僅可以被系統所使用,對於應用程式來說,它是不可見的)。系統為每個應用的所有檔案設定許可權,因此,只有和應用使用者ID相匹配的應用才可以讀取應用的檔案。
3. 每個進程都有自已的虛擬機器(VM),因此,每個應用的代碼都獨立地運行著。
4. 預設地,每個應用都在它自已的Linux進程裡運行。當應用的任何一個組件需要被執行時,Android系統都會運行這個進程,然後完全停下不再需要的進程,或者恢複其它應用佔有的記憶體。
在這種方式中,Android系統實現了最小特權原則。也就是說,每個應用預設都只能訪問它完成工作所必須的組件,不會訪問其它的。這樣做就建立了一個非常安全的環境,在這樣的環境裡,如果一個應用不給分配許可權的話,它就不能訪問系統的任何內容。
雖然如此,但是,對於一個程式,把資料共用給其它應用,或者從系統服務中擷取東東,有下面幾種方法:
1. 可以讓兩個應用共用同一個Linux 使用者ID,在這種情況下,這兩個應用可以擷取另外一個的檔案夾。為了保護系統資源,有相同使用者ID的程式可以運行在同一個Linux進程中,共用著相同的虛擬機器(應用程式也應該有著同樣的認證簽名)
2. 應用程式也可以通過請求許可權的方式來擷取裝置的資料,比如連絡人資訊,簡訊,存放裝置(SD card),照相機,藍芽,等等。所有應用程式的許可權在安裝時候會展示給使用者,使用者同意後才能安裝。
關於Android應用程式如何在系統中存在的基本知識,本文檔的其餘部分向你介紹:
1. 定義了應用程式的核心架構組件。
2. 申明了應用程式用到的組件和所需的裝置元素的mainfest檔案。
3. 獨立於應用代碼的資源,可以讓你的應用極大的最佳化它在各種配置裝置的表現
應用組件
對於一個Android應用來說,應用組件是構建應用所必須的模組。每一個組件都是一個不同的點,系統可以通過這些點進入你的應用。對於使用者來說,不是所有的組件都是真正的進入點,但是這些組件之間都有著相互的依賴性-每個組件都是獨一無二的模組,這些模組有助於定義應用的整體行為。
有四種不同類型的應用組件。每一種類型的組件都為一個明確的意圖服務,也都有明確的生命週期,生命週期定義了如何建立和銷毀它。
下面就是應用組件的四種類型:
Activity
一個Activity代表了使用者介面的一個單獨的螢幕。例如,郵件相關的應用或許應該有一個Activity來展示新郵件的列表,另外一個Activity來寫郵件,再一個Activity來讀取郵件。雖然在郵件應用中這些Activity一起工作,形成了一個完整的使用者體驗,但是,每一個部分又是獨立工作的。例如,另外一個應用可以啟動上面這些Activity中的任何一個Activity(如果郵件應用允許的話)。例如,照相應用可以可以啟動郵件應用裡的寫新郵件的應用,這樣做對使用者來說,就可以分享照片了。
一個activity類就是一個實現了Activity 的Java類。在Activities開發人員指導裡,你可以擷取更多的知識。
服務
服務是運行在後台,執行耗時較長的操作,或者甚至執行遠程進程的操作。服務不提供使用者介面。例如,當使用者來到其它應用時,服務會負責在背景播放音樂,或者說,服務不會鎖住使用者和activity的互動,從網路上擷取資料。比如一個activity,可以啟動一個服務,並可以讓它運行或者邦定到這個activity,以便與其進行互動操作。
一個服務是作為Service子類來實現的,在Services開發指南中,你能學到