標籤:android 基本概念
1. 系統架構
Android的總體系統架構由四個大的層次組成:
1) Linux核心
Android構建在一個較為穩定的基礎之上:Linux核心。Android使用Linux完成其記憶體管理、進程管理、網路和其他動作系統服務工作。開發期間需要的某些公用程式要和Linux打交道,例如adb shell命令開啟一個Linux shell,從中可以輸入要在裝置上啟動並執行其他命令。
2) 本機庫
Linux核心層上面一層中包含了Android的本機庫,這些共用庫都是用C或C++語言編寫的,並且針對手機使用的特定硬體架構進行了編譯,並已由手機製造商預先安裝到手機中。最重要的一些本機庫包括:介面管理器,2D和3D圖形,媒體轉碼器,SQL資料庫,Android附帶的Java核心庫五個部分組成。
3) 應用程式架構
位於本機庫和運行時上面的是應用程式架構層,該層提供了在建立應用程式時需要使用的各種進階構建塊,它包括Active Manager,內容提供者,資源管理員,位置管理器,通知管理器五個最重要部分。
4) 應用程式和小組件
最高層是應用程式和小組件層,應用程式是與使用者互動的程式,小組件則只能在應用程式主畫面中的小矩形框中操作。
2. 視窗管理
Android中有一個前台應用程式,它通常會佔據除狀態列以外的所有螢幕空間,使用者開機時,看到的第一個應用程式是Home應用程式。使用者在運行應用程式時,Android會啟動該程式並將其置於前台。所有程式和視窗都被系統的Active Manager記錄在應用程式棧中,使用者可隨時按Back按鈕返回到棧中的上一個視窗。
從內部來看,每個使用者介面視窗都是通過一個Activity類表示的,而每個活動都有其自己的生命週期。在Android中,即使其進程被結束,相應的應用程式仍然存活,活動的生命週期與進程的生命週期沒有關係,進程只是各種活動可隨意使用的一個容器。
Android程式中的每個活動在其存在期間都會處理以下多種狀態之一,改變狀態時,系統會通過onXXX()方法通知開發人員:
1) onCreate(Bundle): 初次開機活動時會調用該方法,可使用該方法執行一些初始化操作。
2) onStart(): 該方法說明了將要顯示給使用者的活動。
3) onResume(): 使用者可以開始與活動進行互動時會調用該方法。
4) onPause(): 活動將要進入後台時會運行該方法。
5) onStop(): 使用者不再看到某個活動,或一段時間內不需要某個活動時,可以調用該方法。
6) onRestart(): 如果調用該方法,表明要將已處理停止狀態的活動重新顯示。
7) onDestroy(): 銷毀活動前會調用該方法。
8) onSaveInstanceState(Bundle): Android調用該方法的作用是讓活動可以儲存每個執行個體的狀態。
9) onRestoreInstanceState(Bundle): 使用onSaveInstanceState()方法以前儲存的狀態重新初始化某個活動時會調用該方法。
650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/37/F8/wKiom1Oxc7LjSEnGAAGpbWagz4E134.jpg" title="Other-Pic.jpg" alt="wKiom1Oxc7LjSEnGAAGpbWagz4E134.jpg" />沒有在前台中啟動並執行活動可能被停止,或者容納這些活動的Linux進程被結束,從而為新活動騰出空間,有時onPause()方法可能是活動中調用的最後一個方法,所以才應在該方法中儲存下次要繼續使用的任何資料。
3. 構建塊
Android中最重要的一些對象是活動、意圖、服務和內容提供者。一個活動就是一個使用者介面螢幕,應用程式可以定義一個或多個活動用以處理常式不同階段的任務,每個活動都要儲存自己的狀態,以便日後還原這些狀態。意圖是一種描述具體動作的機制,比如拍照、拔電話等,Android中幾乎所有事情都要經曆意圖階段,所以有很多機會可替換或重用很多組件。服務是在後台啟動並執行任務,無需與使用者直接互動,類似UNIX的守護進程。內容提供者是封裝在自訂API中的一組資料,可以讀取該資料和向API中寫入資料,這是在應用程式之間共用全域資料的最佳方式。
資源是程式需要的本地化後的文本字串、位元影像或其他少量的非代碼資訊。程式產生時,所需的所有資源都會被編譯到應用程式中。資源由開發人員建立並儲存在項目內的res目錄中,Android資源編譯器會根據資源所處的子檔案夾以及檔案的格式來處理這些資源,可以給資來源目錄名稱添加尾碼來支援針對特定語言、螢幕方向或像素密度的自訂資源。資源編譯器會將資源壓縮並打包,產生一個名為R的類,其中包含的標識符可用於在程式中引用這些資源,所以Android可以確保所有引用都是用效的,還可以節省空間的,因為它不必儲存所有這些資源鍵。
4. 安全性
每個應用程式都在其自己的Linux進程中運行,硬體禁止一個進程訪問其他進程的記憶體。每個應用程式都被分配了一個具體的使用者ID,某個應用程式所建立的任何檔案都不能被其他應用程式讀寫。另外,對某些關鍵操作的訪問也是有限制的,必須在一個名為AndroidManifest.xml的檔案中明確請求獲得所需的許可權。安裝應用程式時,軟體包管理器會根據認證以及使用者提示的情況授予或不授予這些許可權,以下是常用的一些許可權:
1) INTERNET: 訪問網際網路。
2) READ_CONTACTS: 讀取(但不能寫入)使用者的連絡人資料。
3) WRITE_CONTACTS: 寫入(但不能讀取)使用者的連絡人資料。
4) RECEIVE_SMS: 監視收到的SMS簡訊。
5) ACCESS_COARSE_LOCATION: 使用不太精確的位置提供者,如手機基站或Wi-Fi。
6) ACCESS_FINE_LOCATION: 使用更為精確的位置提供者,如GPS。
Android甚至可以限制對整個系統各部分的訪問,通過在AndroidManifest.xml中使用XML標籤,可以限制誰能啟動活動、啟動服務或綁定到服務、向接收者廣播意圖,或者訪問內容提供者中的資料。
本文出自 “方圓之間” 部落格,謝絕轉載!