鍍金池/ 教程/ Android/ Android 應用基本概念
Dialog 顯示圖像
線程 Bezier 曲線
創(chuàng)建應用程序框架
引路蜂二維圖形庫簡介及顏色示例
Android 應用基本概念
Intents 和 Intent Filters
安裝開發(fā)環(huán)境
Option Menu 畫筆示例
自定義對話框 Transform
數(shù)據(jù)綁定 Data Binding
概述
Broadcast Receiver 短信觸發(fā)示例
發(fā)布應用
自定義 Adapter 顯示列表
RadioButton 多邊形及路徑繪制
訪問 Internet 繪製在線地圖
第一個應用 Hello World
Activities
Button 畫刷示例
使用資源 Resources
Context Menu 繪制幾何圖形
用戶界面設(shè)計
引路蜂二維圖形繪制實例功能定義

Android 應用基本概念

Android 平臺的一個顯著的特點是“低耦合”。Activity 是 Android 應用的一個最基本的用戶 UI 模塊。如果采用 Windows Form 應用作為參照,Activity 相當于 Windows 中的 WinForm。和 Windows 應用不同的是,運行一個 Activity 或是 Activity 之間的交互是通過消息來實現(xiàn)的。也就是說如果想在起動一個 Activity 或是在一個 Activity 中啟動另一個 Activity,是通過發(fā)送Intent 消息來觸發(fā),而不像 Windows WinForm 應用,需要調(diào) Form 示例的 Show 或是 Load 方法來實現(xiàn)。通過 Intent 消息來實現(xiàn) Activity 之間的交互,則最大程度上減小了模塊之間的耦合度。這種機制類同 Subscriber/Publisher 機制。

Android 平臺的另外一個重要特性是“重用”。一個 Android 應用可以有多個 Activity 組成。拿撲克牌做比方,Android 應用相當于撲克牌的盒子,盒子里的每張牌就是一個相對獨立的 Activity。這個Android 應用運行時想當于從撲克牌中抽取牌疊放在一起,最先抽出的牌就是 Android 應用的主Activity,主 Activity 可以在調(diào)用其它 Activity(通過發(fā) Intent 消息),被觸發(fā)的 Activity 就像撲克牌一樣發(fā)在主 Activity 上面。這樣就形成一個“Activity”棧。在設(shè)備上按“Back”則可以如瀏覽器一樣回到上一個 Activity。 Android 手機上每個應用都是一樣的結(jié)構(gòu)?!爸赜谩敝?Android 應用在運行時,可以觸發(fā)其它應用中定義的 Activity。比如說在 GTalk 中想顯示某個朋友在地圖上的位置。而 GoogleMap 應用可以顯示地圖。GTalk 不需要重復同樣的代碼或是對于類似的 Activity。可以直接通過 Intent 消息來啟動 GoogleMap 中的 MapViewActivity。

下圖顯示了 Android 應用的基本組成部分。

http://wiki.jikexueyuan.com/project/android-development-tutorial/images/9.png" alt="" />

除了 Activity 之外,Android 也可以實現(xiàn) Service,Service 類同 Windows Service,一般在后臺運行,不含用戶界面。Brodcast Receiver 可以用來響應一些系統(tǒng)消息?;竟δ苡悬c類似 Java ME 中的 PushRegistry。 比方說你想在收到短信時觸發(fā)你的應用,可以在 Android 應用的 Manifest 文件中定義一個 Broadcast Receiver 來觸發(fā)一個 Activity。

如上圖所示,Android 應用中,Application 對象好像一個容器,里面可以包含多個 Activity,多個 Service 或是多個 Broadcast Receiver。這些 Activity,Service,Broadcast Receiver 相對獨立,相互之間交互只能通過 Intent 消息。如同 Java ME 的 MIDlet 的 JAD 文件一樣,每個Android 應用都有一個 Manifest 文件,文件名固定為 AndroidManifest.xml。Android 應用中定義的 Activity,Service,Broadcast Receiver 等都需要定義在這個 Mainifest 文件中才能被本應用或是其它應用所調(diào)用。 這里還是借用 Publisher/Subscriber 的概念來說明。 一個 Activity,Service 等 如果能被調(diào)用的話則需要在 Mainifest 中 Subscriber 某類消息。

<activity android:name=”.HelloWorld”
                  android:label=”@string/app_name”>
            <intent-filter>
                <action android:name=”android.intent.action.MAIN” />
                <category android:name=”android.intent.category.LAUNCHER” />
            </intent-filter>
        </activity>

上面是 HelloWorld 中主 Activity 在 AndroidManifest.xml 的定義,定義了這個 Activity 的對應的 class,以及可以觸發(fā)該 Activity 的 intent-filter ,(相當于 Subscriber 某種消息),但用戶點擊該應用圖標時,Android 操作系統(tǒng)將發(fā)送一個 Intent 消息,Android 系統(tǒng)檢查subscribe 該 Intent 消息的 Activity,Service 或是 Broadcast Receiver,如果找到,則其動該 Activity,Service 或是 Broadcast Receiver。對于 HelloWorld,則在屏幕上顯示“Hello World”。 除了系統(tǒng)可以發(fā)送 Intent 外,Android 引用也可以通過 startActivity(Intent) ,StartService(Intent)來向啟動其它 Activity 或是 Service。Intent 可以帶傳入數(shù)據(jù)(參數(shù))。即使在同一個應用中,也需要通過 Intent 來傳送信息,這樣大大降低了應用中各個模塊之間的耦合度,從而可以無縫更換應用中的某個模塊而不會影響其它部分。 剛開始接觸 Android 這種機制時可能會覺得不如 WinForm 的 (new Form1()).Show()來的直接方便。但從應用的可維護性,可擴展性來看,Android 這種低耦合設(shè)計是非常有利的。 此外,如果需要在多個 Activity 這間共享一些數(shù)據(jù),可以通過擴展 Application 類實現(xiàn),在 Application 類中定義的變量可以被應用中所有Activity 所訪問。