引言
上篇android開發之旅:應用程式基礎及元件介紹了應用程式的基礎知識及android的四個元件,本篇將介紹如何啟用組關閉元件等。本文的主題如下:
2、關閉元件
3、清單檔案
4、intent過濾器
1、啟用元件:意圖(intents)
當接收到contentresolver發出的請求後,內容提供者被啟用。而其它三種元件——活動、服務和廣播接收者,被一種叫做意圖(intent)的非同步訊息啟用。意圖是乙個儲存著訊息內容的intent物件。對於活動和服務來說,intent物件指明了請求的操作名稱以及作為操作物件的資料的uri和其它一些資訊。例如,它可以傳遞對活動的乙個請求,讓它為使用者顯示一張,或者讓使用者編輯一些文字。而對於廣播接收者而言,intent物件指明了廣播的行為。例如當照相按鈕被按下,它可以對所有感興趣的物件廣播。
對於每種元件來說,啟用的方法是不同的。下面將分別介紹活動、服務、廣播接收者元件的啟用方法。
1.1、活動(activity)元件的啟用
通過傳遞乙個intent物件至context.startactivity()或activity.startactivityforresult()以載入(或指定新工作給)乙個活動。相應的活動可以看到初始的意圖,這個意圖通過getintent() 方法來檢視啟用活動。android呼叫活動的onnewintent()方法傳遞任何後續的意圖。
乙個活動經常啟動了下乙個。如果它期望它所啟動的那個活動返回乙個結果,它會呼叫startactivityforresult()而不是startactivity()。例如,如果它啟動了乙個活動讓使用者挑選一張**,它可能會返回被選中的**。結果以乙個intent物件傳遞呼叫活動的onactivityresult() 方法。
1.2、服務(service)元件的啟用
通過傳遞乙個intent物件至context.startservice()以啟動乙個服務(或給予正在執行的服務以乙個新的指令)。android呼叫服務的onstart()方法並將intent物件傳遞給它。
1.3、廣播接收者(broadcast receiver)元件的啟用
應用程式可以通過將intent物件傳遞給
及其它類似方法來產生乙個廣播。android會通過onreceive()方法將intent傳遞給所有對此廣播有興趣的廣播接收者。
2、關閉元件
內容提供者僅在響應contentresolver提出請求的時候啟用。而乙個廣播接收者僅在響應廣播資訊的時候啟用。所以,沒有必要去顯式的關閉這些元件。
而活動則不同,它提供了使用者介面。與使用者進行會話,所以只要會話依然持續,哪怕對話程序空閒,它都會一直保持啟用狀態。與此相似,服務也會在很長一段時間內保持執行。所以android提供方法有序地關閉活動和服務。
當元件不再被使用的時候或者android必須要為更多活躍的元件**記憶體時,元件也可能會被系統關閉。
3、清單(manifest)檔案
當android啟動乙個應用程式元件之前,它必須知道那個元件是存在的。所以,應用程式會在乙個清單(manifest)檔案中宣告它的元件,這個檔案會被打包到android包中。這個.apk檔案還將包括應用程式的**、檔案以及其它資源。
這個清單檔案是xml結構的檔案,且所有的android應用程式都把它叫做androidmanifest.xml。為宣告乙個應用程式元件,它還會做很多額外工作,比如指明應用程式所需鏈結到的庫的名稱(除了預設的android庫之外)以及宣告應用程式期望獲得的各種許可權。
但清單檔案的主要功能仍然是向android宣告應用程式的元件。舉例說明,乙個活動可以如下宣告:
<?xml version="1.0" encoding="utf-8"?>元素的name屬性指定了實現了這個活動的activity類的子類,icon和label屬性指向了包含展示給使用者的此活動的圖示和標籤的資源檔案。<
manifest . . . >
<
<
activity
android:name="com.example.project.freneticactivity"
android:icon="@drawable/small_pic.png"
android:label="@string/freneticlabel"
. . . >
activity
>
. . .
>
manifest
>
其它元件也以類似的方法宣告—— 元素用於宣告服務, 元素用於宣告廣播接收者,而元素用於宣告內容提供者。清單檔案中未進行宣告的活動、服務以及內容提供者將不為系統所見,從而也就不會被執行。然而,廣播接收者既可以在清單檔案中宣告,也可以在**中動態的建立(作為broadcastreceiver
物件)且呼叫context.registerreceiver()方式註冊到系統。
4、intent過濾器
intent物件可以顯式地指定目標元件。如果進行了這種指定,android會找到這個元件(依據清單檔案中的宣告)並啟用它。但如果intent沒有進行顯式的指定,android就必須為它找到對於intent來說最合適的元件。這個過程是通過比較intent物件和所有可能物件的intent過濾器完成的。元件的intent過濾器會告知android它所能處理的intent型別。如同其它關於元件的必要資訊一樣,它們在清單檔案中進行宣告的。這裡是上面示例的乙個擴充套件,其中加入了針對活動的兩個intent過濾器宣告:
<?xml version="1.0" encoding="utf-8"?>示例中的第乙個過濾器——action:「android.intent.action.main」和category:「android.intent.category.launcher」的組合,是常見的。它標記這個活動顯示在應用程式啟動器中,使用者在裝置上看到的可啟動的應用程式列表。換句話說,這個活動是應用程式的入口,是使用者選擇執行這個應用程式後所見到的第乙個活動。第二個過濾器宣告了這個活動針對特定型別的資料。<
manifest . . . >
<
<
activity
android:name="com.example.project.freneticactivity"
android:icon="@drawable/small_pic.png"
android:label="@string/freneticlabel"
. . . >
<
intent-filter . . . >
<
action
android:name="android.intent.action.main"
/>
<
category
android:name="android.intent.category.launcher"
/>
intent-filter>
<
intent-filter . . . >
<
action
android:name="com.example.project.bounce"
/>
<
data
android:mimetype="image/jpeg"
/>
<
category
android:name="android.intent.category.default"
/>
intent-filter>
activity
>
. . .
>
manifest
>
乙個元件可以擁有任意數量的intent過濾器,每個宣告一系列不同的能力。如果它沒有包含任何過濾器,它將只能被顯式宣告了目標元件名稱的意圖啟用。
對於廣播接收者,它在**中建立並註冊intent過濾器,直接作為intentfilter的物件例項化。其它過濾器則在清單檔案中設定。
Android開發之旅 應用程式基礎及元件(續)
成功屬於耐得住寂寞的人,你離成功又近了一步了。引言 上篇android開發之旅 應用程式基礎及元件介紹了應用程式的基礎知識及android的四個元件,本篇將介紹如何啟用組關閉元件等。本文的主題如下 2 關閉元件 3 清單檔案 4 intent過濾器 1 啟用元件 意圖 intents 當接收到con...
Android開發之旅 應用程式基礎及元件(續)
成功屬於耐得住寂寞的人,你離成功又近了一步了。引言 上篇android開發之旅 應用程式基礎及元件介紹了應用程式的基礎知識及android的四個元件,本篇將介紹如何啟用組關閉元件等。本文的主題如下 2 關閉元件 3 清單檔案 4 intent過濾器 1 啟用元件 意圖 intents 當接收到con...
web 應用元件 應用程式
1,web 內容都是儲存在 web 伺服器上的。2,web 伺服器所使用的是 http 協議,因此經常會被稱為 http 伺服器。3,http 伺服器儲存了網際網路中的資料,如果http 客戶端發出請求的話,它們會提供資料 4,http 客戶端和 http 伺服器共同構成了全球資訊網的基本元件 5,...