Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> Android的基本世界觀——系統簡介,組件邏輯及其他

Android的基本世界觀——系統簡介,組件邏輯及其他

編輯:關於android開發

Android的基本世界觀——系統簡介,組件邏輯及其他


前言

作為一個有半年余Android Developing折騰經驗的Android Developer(為什麼不說“開發經驗”呢?因為我仔細想了想,我還沒有獨立地做出一個完善美觀且有使用價值的應用。),要系統地學習安卓平台的基本開發技能,那麼第一步,了解並熟識Android的基本世界觀,應該就是十分必要的了。以前這方面的知識體系不成系統,比較破碎零散,故借此文稍作整理。

我認為在進入任何一個比較復雜的知識技能體系之前,都需要先用基本世界觀來熱熱身。對於高中物理而言,初中數學物理知識就形成了基本世界觀;對於近體詩寫作而言,平水韻和對仗的修辭手法就是基本世界觀;而對於Android,基本世界觀則包括了Android系統的簡介、四大組件的含義、以及其他一些基本的開發邏輯。

Android系統

歷史與現狀

Android(Android System),是一個基於Linux內核的開源移動操作系統,由Google旗下的Open Handset Alliance(OHA,開放手持設備聯盟)持續領導與開發,主要設計用於觸屏移動設備,如智能手機和平板電腦等。Android 1.0 beta於2007年11月5日問世,至於世界上第一部真正意義上使用Android操作系統的設備,則是2008年10月22日發布的HTC Dream。Android系統采用Linux宏內核,系統核心語言是C和C++,主要的編程開發語言是Java。截止2016年初,Android的最新版本是Android 6.0“Marshmallow”(棉花糖)。

安卓6.0

系統與系統架構

Android系統執行於Linux kernel之上,但並不是GNU/Linux。實際上,Android大都並不支持GNU/Linux的一些功能。除了基於Linux的核心之外,則是中介層、數據庫元和用C/C++編寫的API以及應用程序框架。Android的系統架構如下圖所示——

安卓系統結構

可見,系統架構大致分為四層:Linux內核層,核心庫層(以及運行環境),應用框架層和應用層。

Linux內核層比較底層,通常也是對Developer隱藏的。

Android Runtime與Libraries層:
Android的應用程序通常以Java為基礎編寫,運行程序時,應用程序的代碼會被即時轉變為Dalvik dex-code(Dalvik Executable),然後Android操作系統通過使用即時編譯的Dalvik虛擬機來將其運行。也就是說,Android應用程序是運行在Dalvik虛擬機裡面的,並且每一個應用程序對應有一個單獨的Dalvik虛擬機實例(這也保證了如果一個Android應用程序進程意外中止,將不會影響到其它應用程序進程的正常運行。)。Dalvik Virtual Machine在某種角度上很像是JVM(至少我感覺如此),但實際上它們還是有不小的差異的。JVM是堆棧機器(基於Stack),但Dalvik VM是寄存器架構的機器。JVM執行class格式文件,而Dalvik VM執行dex格式文件。 Dalvik VM會通過執行dex碼文件來完成堆棧管理、線程管理、安全異常管理、垃圾回收等重要功能,這些也和JVM很像。
Android系統還會通過一些C/C++庫來支持我們使用的各個組件(包括OpenGL,SQLite,WebKit等一大堆神奇的引擎和庫),這些功能通過應用程序框架提供給開發者,這就是Libraries層

Application Framework(應用框架)層: 應用框架層的意義在於,Android提供給開發者一個框架開發平台,開發者在遵循框架原則和邏輯的基礎上,對框架進行擴展從而開發出各式各樣的app應用。開發時也是通過這一層與底層進行交互,並構建更上一級的應用層。這一層包括了各式各樣的系統API,同時也可以應用JNI等技術。應用框架包括了Activity Manager,Window Manager,Content Provider,View System等重要組成部分,可以理解為開發者的一個工具箱。

應用層:這一層就是最為形象,和用戶直接接觸的層次了,包括電話,短信,郵件和各式各樣的實用APP、游戲等。

其他特征

開發完成後,Android SDK 工具將代碼以及所有數據和資源文件一起編譯到一個APK: Android 軟件包,即 .apk 格式的存檔文件中。一個 APK 文件包含 Android 應用的所有內容。 默認情況下,每個應用都在自己的 Linux 進程內運行。Android 會在需要執行任何應用組件時啟動該進程,然後在不再需要該進程或系統必須為其他應用恢復內存時關閉該進程。 默認情況下,每個應用都只能訪問執行其工作所需的組件,而不能訪問其他組件。 在這樣的安全環境中,應用無法訪問系統中其未獲得權限的部分,但仍然可以通過一些特定的途徑與其他應用共享數據以及訪問系統服務。 應用可以請求訪問設備數據(如用戶的聯系人、短信、可裝入存儲裝置 [SD 卡]、相機、藍牙等)的權限。所有應用權限都必須由用戶在安裝時授予。這也就是安裝時會列出的“需要的權限”信息。

Android四大組件

Activities

活動一般就是一個單獨的用戶界面的屏幕。例如,一個電子郵件應用中可能具有一個顯示新郵件列表的 Activity、一個用於撰寫新郵件的 Activity 以及一個用於閱讀郵件具體內容的 Activity。應用中的多個活動通過協作和聚合的方式形成一種有機的整體,完善用戶體驗,但每個活動都是獨立於其他活動而存在的。在這個邏輯上而言,其他某個應用將可以啟動電子郵件應用中的某一個活動,比如在相機應用在拍照後啟動撰寫新郵件的活動。

一個應用通常由多個彼此松散聯系的 Activity 組成。 一般會指定應用中的某個 Activity 為“主” Activity,即首次啟動應用時呈現給用戶的那個 Activity。Activity之間通過Intent組件進行通信。在開發時,每一個Activity都必須要在AndroidManifest.xml配置文件(即清單文件)中聲明,否則將無法識別也不執行該Activity。

關於Activity的生命周期:Activity 基本上以三種狀態存在,已繼續(運行中)、已暫停和已停止。關於活動的七種方法和生命周期詳解,可見下圖:

活動生命周期

Activity的基本方法:

public class ExampleActivity extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // The activity is being created.
    }
    @Override
    protected void onStart() {
        super.onStart();
        // The activity is about to become visible.
    }
    @Override
    protected void onResume() {
        super.onResume();
        // The activity has become visible (it is now "resumed").
    }
    @Override
    protected void onPause() {
        super.onPause();
        // Another activity is taking focus (this activity is about to be "paused").
    }
    @Override
    protected void onStop() {
        super.onStop();
        // The activity is no longer visible (it is now "stopped")
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        // The activity is about to be destroyed.
    }
}

這些方法共同定義 Activity 的整個生命周期——可以通過實現這些方法監控 Activity 生命周期中的三個嵌套循環:

Activity 的整個生命周期發生在 onCreate() 調用與 onDestroy() 調用之間。 Activity 的可見生命周期發生在 onStart() 調用與 onStop() 調用之間。 Activity 的前台生命周期發生在 onResume() 調用與 onPause() 調用之間。

Services

服務是一種在後台運行的組件,用於執行長時間運行的操作或為遠程進程執行作業。服務不提供用戶界面。服務不影響其他活動與用戶的交互,如用戶在浏覽器中閱讀網頁時,另外一個程序的服務可以在後台播放歌曲。活動等其他組件可以啟動服務,讓其運行或與其綁定以便與其進行交互。

服務有兩種,啟動和綁定:

started:當應用組件(如 Activity)通過調用 startService() 啟動服務時,服務即處於“啟動”狀態。一旦啟動,服務即可在後台無限期運行,即使啟動服務的組件已被銷毀也不受影響。可見,當服務是started狀態時,其生命周期與啟動它的組件無關。 bound:當應用組件通過調用 bindService() 綁定到服務時,服務即處於“綁定”狀態。綁定服務提供了一個客戶端-服務器接口, 僅當與另一個應用組件綁定時,綁定服務才會運行。 調用者(如一個Activity)與服務綁定在了一起,調用者一旦退出,服務也就終止。多個組件可以同時綁定到該服務,但全部取消綁定後,該服務即會被銷毀。

需要注意的是,服務也可以以兩種方式同時存在——問題的關鍵在於回調方法的具體實現。另外,和Activity一樣,在程序清單中需要聲明所有服務。

服務的生命周期較為簡單:

服務生命周期

Content providers

內容提供者管理一組可以共享的應用數據,也叫內容提供程序。其他應用可以通過內容提供程序查詢,甚至修改數據(如果內容提供程序允許)。 例如,Android 系統可提供管理用戶聯系人信息的內容提供程序。另外,內容提供程序也適用於讀取和寫入不共享的私有數據。它的好處是統一了數據訪問方式。Content Provider的主要用法是借助ContentResolver對象用作客戶端來與提供程序通信。

內容 URI 是用於在提供程序中標識數據的 URI。內容 URI 包括整個提供程序的符號名稱(其權限)和一個指向表的名稱(路徑)。這裡的URI以content://作為前綴,表示該數據由ContentProvider來管理。

Broadcast receivers

廣播接收器是一種用於響應系統范圍廣播通知的組件。 許多廣播都是由系統發起的—例如電池電量不足。應用也可以發起廣播,如通知其他應用某些數據已下載至設備且可供給使用。應用可以使用它對外部事件進行過濾,只對感興趣的外部事件通知(如當電話呼入時,或者WIFI網絡可用時)進行接收並做出響應。

廣播接收器不會顯示用戶界面,但它們可以創建狀態欄通知,在發生廣播事件時提醒用戶。Broadcast receiver的注冊有兩種方法,分別是程序動態注冊和在AndroidManifest清單文件中進行靜態注冊。這個組件可以看做是一種程序間通信的“橋梁”。

有關組件的其他

按照官方文檔自誇的說法,Android系統設計的獨特之處在於,任何應用都可以啟動其他應用的組件。例如,如果想讓用戶使用設備的相機拍攝照片,很可能有另一個應用已經可以執行該操作,那麼這個應用就可以利用另外一個應用,而不是開發一個 Activity來自行拍攝照片。

當系統啟動某個組件時,會啟動該應用的進程(如果尚未運行),並實例化該組件所需的類。四種組件類型中的三種—Activity、服務和廣播接收器—通過名為Intent的異步消息進行啟動。Intent會在運行時將各個組件相互綁定(可以將 Intent視為請求操作的信使)。

清單文件

在 Android 系統啟動應用組件之前,系統必須通過讀取應用的AndroidManifest.xml文件(“清單”文件)確認組件存在。應用必須在此文件中聲明其所有組件,該文件必須位於應用項目目錄的根目錄中。AndroidManifest文件中未進行聲明的活動、服務以及內容提供者將不為系統所見,從而也就不可用。

當然,清單文件還有別的重要作用,如:

確定應用需要的任何用戶權限,如互聯網訪問權限或對用戶聯系人的讀取權限。 根據應用使用的 API,聲明應用所需的最低API 級別(如6.0系統的API Level就是23,4.3版本則是18)。 聲明應用使用或需要的硬件和軟件功能,如相機、藍牙服務或多點觸摸屏幕。

應用資源

Android應用顯然並非只有代碼—它還需要與源代碼分離的資源,如圖像、音頻文件以及任何與應用的具體呈現有關的內容。對於每一項資源,SDK 構建工具都會定義一個唯一的整型 ID,利用它可以引用應用代碼或 XML 中定義的其他資源中的資源。各種資源理應放入項目 res/ 目錄的特定子目錄之下,常見的目錄有drawable, layout, mipmap, values等。

如何入門Android開發

要入門Android開發,我個人認為需要做好的准備如下:

掌握Java語言,至少需要做到寫代碼不會有語法錯誤。 初步了解Android的世界觀,正如上文所述。 搭建開發環境,配置好JVM環境(以及JDK等Java環境),Android Studio(谷歌官方推薦的開發平台,已取代Eclipse), Android SDK(用於ADB,應用調試和API管理等)與Genymotion(目前流行的Android Virtual Device插件工具,勝於Android Studio自帶的AVD)。 學會有效地利用谷歌搜索和安卓官方網站。

以上就是成為一個Android Developer所需的簡單准備條件,Android Developing本身是個復雜的體系,學習起來有不小的難度,需要耗費很多時間與精力,但是開發本身無論如何都是一件快樂而充滿成就感的事情。

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