iT邦幫忙

7

深入淺出Android程式設計(30)-Android應用程式的剖析

lucius 2008-11-19 19:46:1616840 瀏覽
  • 分享至 

  • xImage
  •  

在這個章節中,我們要介紹的是有關Android應用程式的剖析。
Android應用程式基本上是由下面四個區塊組合而成:

  1. Activity
  2. Broadcast Intent Receiver
  3. Service
  4. Content Provider

並非所有的應用程式都需要有這四種區塊來組成,依開發人員的應用程式可能用到其中幾個區塊來組合。

一旦開發人員決定在應用程式中使用那些區塊來組成,開發人員應該在AndroidManifest.xml文件中列出來。這是一個XML文件,開發人員可以在其中聲明應用程式用到的區塊組件以及此區塊提供的功能和必要的條件。在Android Manifest File Document有完整的細節描述。(請參考下述網址:http://code.google.com/android/devel/bblocks-manifest.html )

而下述XML內容就是一個簡單的AndroidManifest.xml範例。如圖80所示。在這個範例中只有放一個Activity元件,就是在<activity>XML元素中。

圖80

首先,我們先來看第一個區塊Activity

Activity

Activities是Android四個區塊中最常用的一種。在應用程式中,一個Activity通常就是一個單獨的畫面。每一個Activity通過一個繼承了Activity基本類別來實現。這個類別將會顯示一個或有多個View物件的界面。並且回應一些事件功能。
大部份的應用程式都會由多個畫面來組成。例如:一個文字訊息傳送程式會有一個畫面是用來顯示要發送訊息的聯絡人清單,另一個畫面用來輸入要傳送的訊息內容,最後一個畫面用來查閱舊的訊息內容或是改變程式的設定畫面。
每一個畫面都會實作在一個Activity裡。切換到另一個畫面就是去啟動另一個Activity起來。在某些情況下,Activity可以回傳一個數值給之前的一個Activity,例如:一個Activity讓使用者選取一張照片,然後告知上一個Activity使用者選取了那張照片。

當一個新的畫面打開時,之前的畫面會暫停並且系統會將它放進歷史堆疊中。使用者可以向後導航到之前打開的歷史畫面。畫面也可以在不適合繼續保存時,從歷史堆疊中移除。Android為每一個以主畫面(Home)打開的應用程式保持其歷史堆疊。

Intent and Intent Filters:

Android使用一個特殊的類別叫做Intent,來在畫面之間做移動的動作,Intent是用來描述一個應用程式想要做什麼事情。在Intent資料結構中兩個最重要的部份,一個是動作及對資料產生什麼樣的反應。
動作主要的內容有MAIN(程式的進入點),View,Pick,Edit等動作。而資料則是用URI的形式來表示。
例如:想要查看一個聯絡人的訊息,開發人員需要建立一個Intent,包含了View的動作及指向該聯絡人資料的URI描述句。

另一個相關的類別是Intent Filter。當Intent要求去做某些事情時,Intent Filter被用來描述這個activity能夠做些什麼事情。例如:一個activity要能夠顯示聯絡人資料,就必需要在Intent Filter說明要如何處理聯絡人資料並且用ACTION_VIEW來呈現出來。Intent Filter都會宣告在AndroidManifest.xml檔案中。

而畫面的切換則是由resolving intent來實現。當使用者想要產生新的畫面時,現行的activity就使用startActivity(myIntent)方法。然後系統會根據所有已安裝的應用程式所定義的intent filter來看那個應用程式是最適合myIntent。當startActivity方法被呼叫時,resolving Intents的處理過程是伴隨而來的。
而resolving Intent提供開發人員有兩個好處:

A. 讓Activities可以很容易的利用Intent的機制去使用其他應用程式的功能。
B. 讓Activities可以很容易的在任何情況下,由新的Activity來取代。

接下來是Broadcast Intent Receiver

Broadcast Intent Receiver:

當開發人員希望應用程式來對外部的事件做一些處理時,可以使用Broadcast Intent Receiver。例如:當電話響時,或是網路資料可以使用時,或是時間到了午夜時。Broadcast Intent Receiver並不能拿來顯示出使用者介面,它必需利用Notification Manager來通知使用者所設定的事件已經觸發。
Broadcast Intent Receiver同樣可以在AndrodiManifest.xml檔案中宣告,也可以在撰寫程式碼,利用 Context.registerReceiver()方法來宣告Broadcast Intent Receiver。
應用程式並不會因為Broadcast Receivers被呼叫而被它執行起來。而且當Broadcast Receivers被觸發時,系統會依宣告的需求來執行相對應的應用程式。應用程式可以利用 Context.sendBroadcast()方法來發出他們自己的intent broadcast給其他的應程式。

接下來是Service

Service:

Service是沒有使用者介面,而且是可以長時間運作的程式碼。例如:像多媒體播放器,再播放列表中的歌曲。對於一個多媒體播放器的應用程式,可能會有一個或多個Activities在運行,使用者選擇歌曲並播放,然而,並不會有一個Activity來處理播放音樂,因為使用者可能開啟不同的應用程式時,音樂還是要繼續播放。
此時,多媒體播放器的Activity就會使用 Content.startService()方法來讓音樂持續播放。系統會一直播放音樂,直到音樂結束。
當應用程式進入背景狀態時,開發人員可以利用 Content.bindService()方法來跟Service進行連結的動作。當連接到一個Service時,開發人員就可以透過該Service開放出來的介面跟應用程式進行溝通。以剛才播放音樂的Service來看,Service可能允許使用者進行音樂的暫停、倒轉、快轉等動作。

最後我們介紹Content Provider

Content Provider:

應用程式可以將應用程式的資料儲存到檔案、SQLite資料庫或其他的機制儲存起來。當開發人員希望應用程式的資料可以被其他應用程式共享時,Content Provider就會非常有用。Content Provider實現了讓應用程式之間互相分享資料的機制。在Accessing Content Providers有完整的細節描述。(請參考下述網址:http://code.google.com/android/devel/data/contentproviders.html )。


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言