1. 程式人生 > >Android(一) 安卓概述

Android(一) 安卓概述

一、Android簡單介紹:   

Android是基於Linux核心的軟體平臺和作業系統;

它採用了軟體堆層(software stack,又名軟體疊層)的架構,主要分為三部分: 

 1) 底層以Linux核心為基礎,由c語言開發,只提供基本功能。 

 2) 中間層包括函式庫Library和虛擬機器Virtual Machine,由C+開發。  

3) 最上層是各種應用軟體,包括通話程式,簡訊程式等,應用軟體則由各公司自 行開發,以java編寫。


Android 應用程式

一般情況Android應用程式是由以下四種元件構造而成的:

活動(activities)

服務(service)

內容提供器(content provider)

需要注意的是,並不是每個Andorid應用程式都必須構建這4個元件,有些可能由這些元件的組合而成。

每個應用在獨立的Linux程序中載入執行析構,一個應用的崩潰不會波及別的應用;

一個應用可以呼叫其它應用的模組而不用link這些模組的程式碼。Android應用沒有單一的應用入口;

一旦你確定了你的應用程式中需要的元件,那麼你就應AndroidManifest.xml中列出他們。

這是一個XML配置檔案,它用於定義應用程式中需要的元件、元件的功能及必要條件等。這個檔案是必須的。


詳解:活動
活動是最基本的Andorid應用程式元件,應用程式中,一個活動通常就是一個單獨的螢幕。每一個活動都被實現為一個獨立的類,並且從活動基類中繼承而來, 活動類將會顯示由檢視控制元件組成的使用者介面,並對事件做出響應。 大多數的應用是由多螢幕顯示組成。當開啟一個新的螢幕時,之前一個螢幕會被置為暫停狀態並且壓入歷史堆疊中。使用者可以通過回退操回到以前開啟過的螢幕。我們可以選擇性的移除一些沒有必要保留的螢幕,因為Android會把每個從桌面開啟的程式保留在堆疊中。

一個activity有四個狀態:
﹡ 當activity在前臺:active或者running狀態
﹡ 當activity不在前臺但是可見(被不完全覆蓋):pause狀態
﹡ 當activity在後臺:stop狀態
在stop和pause狀態下,該activity程式保留在歷史堆疊中,但是當系統記憶體不足時有可能迫使activity結束並釋放記憶體以及以及結束其程序;當它需要重新顯示時再重新載入;

Activity的生命週期:

onCreat(),onStart(),onResume(),onRestart(),onPause(),onStop(),onDestory()

大家可以參考該部落格:http://www.cnblogs.com/lyp3314/archive/2011/11/10/2244971.html點選開啟連結


詳解:廣播接收器
你可以使用BroadcastReceiver來讓你的應用對一個外部的事件做出響應。 

比如:當電話呼入時,資料網路可用時,或者到了晚上時。

BroadcastReceivers不能顯示UI,它只能通過 NotificationManager 來通知使用者這些有趣的事情發生了。

BroadcastReceivers既可以在AndroidManifest.xml中註冊, 也可以在程式碼中使用Context.registerReceiver()進行註冊。

但這些有趣的事情發生時,你的應用不必對請求呼叫BroadcastReceivers,系統會在需要的時候啟動你的應用,並在必要情況下觸發BroadcastReceivers。

各種應用還可以通過使用Context.sendBroadcast() 將它們自己的intent broadcasts廣播給其它應用程式。

大家可以參考該部落格:http://blog.csdn.net/huangbiao86/article/details/6668525點選開啟連結

詳解:服務
一個服務是具有一段較長生命週期且沒有使用者介面的程式。

 比較好的一個例子就是一個正在從播放列表中播放歌曲的媒體播放器。

在一個媒體播放器的應用中,應該會有多個活動,讓使用者可以選擇歌曲並播放歌曲。 

然而,音樂重放這個功能並沒有對應的活動,因為使用者當然會認為在導航到其它螢幕時音樂應該還在播放的。 

在這個例子中,媒體播放器這個活動會使用Context.startService() 來啟動一個服務,從而可以在後臺保持音樂的播放。 

同時,系統也將保持這個服務一直執行,直到這個service執行結束。

(你可以通過閱讀Life Cycle of an Android Application 獲取更多關於服務的介紹). 另外,我們還可以通過使用Context.bindService() 方法,

連線到一個服務上(如果這個服務還沒有執行將啟動它)。 當連線到一個服務之後,我們還可以通過服務提供的介面與它進行通訊。

拿媒體播放器這個例子來說,我們還可以進行暫停、重播等操作。

詳解:內容提供器

應用程式能夠將它們的資料儲存到檔案、SQLite資料庫中,甚至是任何有效的裝置中。

當你想將你的應用資料與其它的應用共享時,內容提供其將會很有用。

一個內容提供器類實現了一組標準的方法,從而能夠讓其它的應用儲存或讀取此內容提供器處理的各種資料型別。 

更詳細的內容提供器資料,

Android 應用程式模組: 應用, 任務, 程序, 和執行緒
在大多數作業系統裡,存在獨立的一個1對1的可執行檔案(如Windows裡的exe檔案), 它可以產生程序,並能和介面圖示、應用進行使用者互動。

但在Android裡,這是不固定的,理解將這些分散的部分如何進行組合是非常重要的。


由於Android這種可靈活變通的,在實現一個應用不同部分時你需要理解一些基礎技術:
一個android 包 (簡稱 .apk ) ,裡面包含應用程式的程式碼以及資源。這是一個應用釋出,使用者能下載並安裝他們裝置上的檔案。
一個 任務 ,通常使用者能當它為一個“應用程式”來啟動:通常在桌面上會有一個圖示可以來啟動任務,這是一個上層的應用,可以將你的任務切換到前臺來。
一個 程序 是一個底層的程式碼執行級別的核心程序。通常.apk包裡所有程式碼執行在一個程序裡,一個程序對於一個.apk包;然而, 程序 標籤常用來改變程式碼執行的位置,可以是 全部的.apk包 或者是獨立的 活動, 接收器, 服務, 或者 提供器元件。
程序
在Android中,程序是應用程式的完整實現,而不是使用者通常瞭解的那樣。他們主要用途很簡單:

提高穩定性和安全性,將不信任或者不穩定的程式碼移動到其他程序。

可將多個.apk包執行在同一個程序裡減少系統開銷。

幫助系統管理資源,將重要的程式碼放在一個單獨的程序裡,這樣就可以單獨銷燬應用程式的其他部分。

像前面描述的一樣,程序的屬性被用來控制那些有特殊應用元件執行的程序。

注意這個屬性不能違反系統安全: 如果兩個.apk包不能共享同一個使用者ID,卻試圖執行在通一個程序裡,這種情況是不被允許的,事實上系統將會建立兩個不同的程序。

Android應用構成
Android應用是由各種各樣的元件來構成。 

這些元件大部分都是鬆散連線的,準確 的說你可以把它們看成元件的聯合而非是一個單一的應用。

通常,這些元件執行在同一個系統程序裡面。你也可以在這個程序裡面建立多個執行緒 (這是很常見的),如果必要你也可以建立獨立的子程序。

不過這種情況是非常少見的, 因為Android盡力使程式碼程序間透明。

以下部分是很重要的Android APIs:

AndroidManifest.xml

AndroidManifest.xml 是系統的控制檔案,它告訴系統如何處理你所建立的所有 頂層元件(尤其是activities,服務,Intent接收器和後面描述的內容管理器)。

舉例 來說,控制檔案就是把你的活動(Activities)要接收的Intents連線在一起的“膠水”。

活動(Activities)

活動(Activity)就是一個有生命週期的物件。 一個Activity就是完成某些工作的程式碼塊, 如必要的話,這部分工作還可能包括對使用者UI介面的顯示。

不過這不是必須的,有些活 動從不顯示UI介面。典型地,你將會指定你的應用程式中的一個活動為整個程式的入口點。

檢視(Views)

檢視(Views)可以將其自身繪製到螢幕上。Android的使用者介面由一系列的檢視樹 (trees of views)構成。

介面都是由一組以樹的形式出現的檢視組成的。開發者可 以通過建立一個新的檢視的方法來使用自定義的圖形處理技術(比如開發遊戲,或者是 使用了不常用的使用者圖

形(UI)視窗介面(widget))。

Intents
Intents是一個簡單的訊息物件,它表示程式想做某事的“意圖”(intention)。

比如如果你的應用程式想要顯示一個網頁,那麼它通過建立一個Intent例項並將其傳遞給 系統來表示意圖瀏覽這個URI。

系統將定位於知道如何能處理這一Intent的程式碼(在當 前情況下就是瀏覽器),並執行之。Intents也可以用於廣播系統範圍內的有效事件 (例如通知事件)。

服務(Services)

服務是執行在後臺的一段程式碼。它可以執行在它自己的程序,也可以執行在其他應用程 序程序的上下文(context)裡面,這取決於自身的需要.。

其它的元件可以繫結到一個服 務(Service)上面,通過遠端過程呼叫(RPC)來呼叫這個方法。

例如媒體播放器的服務, 當用戶退出媒體選擇使用者介面,她仍然希望音樂依然可以繼續播放,這時就是由服務 (service)來保證當用戶介面關閉時音樂繼續播放的。

通知(Notifications)

通知將以小圖示的形式呈現在狀態列裡,使用者通過與圖示的互動式操來接收訊息。

最常見 的通知包括簡訊息,通話記錄,語音郵件,但是應用程式也可以建立它們自己的通知事件。 

我們推薦採用通知事件實現提醒使用者的注意。

內容管理器(ContentProviders)

內容管理器(ContentProvider)提供對裝置上資料進行訪問的資料倉庫。

典型的例子就 是使用內容管理器來訪問聯絡人列表。

你的應用程式也可以使用其它程式通過內容管理器提 供的資料,同時你也可以定義你自己的內容管理器來向其它應用提供資料訪問服務。


存、取、提供資料

典型的桌面作業系統一般能提供一種通用的檔案系統,所有應用程式都能儲存和讀檔案,並且其他應用程式也能訪問該檔案(可能需要一些訪問控制設定)

Android使用不同的方式:在平臺上,所有應用程式的資料(包括檔案),對該應用程式是私有的。

當然,Android也提供一種標準方法將自己的私有資料提供給其他應用程式訪問。

這一章節講了很多方法,描述應用如何存取資料,以及將資料提供給其他程式訪問,當然,你也可以向其他應用程式請求並獲得它的資料。

Android提供下面的方式來存取資料:

1.檔案

你可以將你的檔案儲存在裝置上或者其他移動媒介上,預設情況下,其他應用程式是不能訪問這些檔案的。

2.資料庫

Android有直接SQLite資料庫的API。應用程式可以建立以及使用SQLite資料庫。 每個包建立的資料庫都是私有的。

Android SDK提供了編寫應用程式的一些基本包,常用的如下:

android.util
包含有許多底層的工具類,例如專用容器類,XML工具等等。

android.os
提供基本的作業系統服務、訊息傳遞和程序間通訊。
android.graphics
核心圖形繪製包。
android.text, android.text.method, android.text.style, and android.text.util
提供豐富的文字處理工具、富文字支援以及輸入法等等。
android.database
包含資料庫相關的底層API。
android.content
提供大量的訪問儲存在裝置上的資料的服務:安裝在裝置上的應用及相關資源,用於持續的動態資料的內容提供器(content provider)。
android.view
核心使用者介面框架。
android.widget
提供構建view包的標準使用者介面元素(列表、按鈕、佈局管理器等等)。
android.app
提供高層應用模型,通過活動實現。

總結:在這裡對安卓做了一個大體概述,具體知識點將在後期部落格中更新,敬請期待。

下章預告:Android編譯環境的搭建(一)