2011年6月13日 星期一

Android 開發前須知 - Activity, Intent, Content Provider, Service 簡介


Android 應用程式由四個主要模組所組成,此四個模組分別為 Activity、Intent、Content Provider、Service,雖然一個 Android 應用程式都由這四個模組構成,但並不代表著每個應用程式必須包含每個模組,像是簡單的印出 HelloWorld 字串的應用,只需要包含一個 Activity 即可達成。

Activity


Activity 是應用裡面最基本的模組,每一個 Activity 代表著一個螢幕,每一個螢幕所負責的就是處理應用程式所需的工作或是跳轉至其他 Activity 等功能,例如我們需要一個應用為取得課程資訊,這時可以設計成,第一個 Activity 顯示著所有學院的列表頁,第二個 Activity 顯示資訊系所所有課程列表,第三個 Activity 顯示計算機概論課程資訊,也因為如此的設計讓應用的功能上可以容易的轉換。


package nchu.test.HelloWorld;

import android.app.Activity;
import android.os.Bundle;

public class HelloWorld extends Activity {
/** Called when the activity is first created. */

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.main);
}
}

所有的 Activity 都繼承於 android.app.Activity 類別,並且會馬上呼叫 onCreate() 函式,不過並不是呼叫 onCreate() 之後 Activity 就能馬上運行,實際上 Activity 要能開始運行需要經過三個過程為"建立 -> 開始 -> 重繪",三個過程相對應的函式如下。onResume()為重繪整個螢幕。

開始 -> onCreate() -> onStart() -> onResume() -> Activity 運行


Intent

當創建了許多 Activity 之後,該如何讓這些 Activity 切換,我們可以利用 Intent 這個類別。

Intent 類別主要是描述應用的功能,描述的結構為動作和動作相對應的資料,利用 IntentFilter 裡的描述可以透過比對找到應用程式需要呼叫的 Activity 是哪一個。

我們看一下 AndroidManfest.xml 檔案裡 IntentFilter 描述:

在 action android:name 這行描述的是 Activity 的動作,動作名稱為 android.intent.action.MAIN。

在category android:name 這行描述的是使用哪個種類的元件來掌控 Intent,這裡使用的是category.LAUNCHER,主要可以將 Activity 放置到 top-level application launcher 去執行。


<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

Activity 的跳轉會經過以下幾個步驟:
首先暫停 Activity01,然後 Activity02 進入 Activity 的生命週期,之後先停止 Activity01 然後才將其摧毀。

Activity01 onPause() -> Activity02 onCreate() ->
Activity02 onStart() -> Activity02 onResume() ->
Activity01 onStop() -> Activity01 onDestroy()


Content Provider

一般來說,在 Android 應用程式裡是無法取得不同應用程式的資料,不過當我們使用 Android 設備時可以儲存通訊人連絡電話,不同的應用程式開啟都可以共同的存取這些通訊錄的資料,而這個資料共有的功能就是由 Content Provider 所提供。

Content Provider 是一個特殊的資料儲存類型,並且提供了一些標準的介面方便資料的存取,像是 query()、insert() 或是 update() 等,當我們在應用程式中有需要使用到 Content Provider 時,則必須在 AndroidManifest.xml 檔案中宣告。


Service

當我們開啟一個撥放歌曲的應用程式聽著歌,接著想要上網找尋資料,勢必會遇到一個狀況,必須跳離播歌的程式才能上網,當我們跳離開程式後又希望歌曲可以在背景中繼續撥放著,那這個部份就是由 Service 所提供。

Service 像是在背景提供著服務,不像 Activity 有著介面可以讓使用者操作,通常 Service 的生命周期都是比較長,屬於在背景長駐執行一些不中斷的程式。


相關連結:
Android Developer : Activity
Android Developer : Intents and Intent Filters
Android Developer : Content Provider
Android Developer : Services

1 意見:

匿名 提到...

http://developer.android.com/guide/components/fundamentals.html

張貼留言

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Powered by Blogger