• 沒有找到結果。

第二章 文獻探討

2.1 背景知識資料

2.1.2 Android應用程式組件

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

用程式存在,造成某些虛擬機執行錯誤,並不會影響其他程式DVM的執行,不至於整 個系統瓦解2

圖 3: Android DVM 模型。

2.1.2 Android 應用程式組件

Android 平台依功能需求,將應用程式組件區分為 Activity、Service、Broadcast receiver、Intent 和 Content provider 等五大應用程式組件,以下就各組件作簡介:

1.Activity:一個 Android 應用程式通常由數個 activity 組成,activity 負責前端使用者介 面處理。Activity 在應用程式組件所扮演的角色,類似網頁包含文字、圖形、動畫、

影音和表單輸入的前端網頁畫面,提供使用者介面操作。

然而,Activity 應用程式組件與網頁在開發上主要的不同的地方,除了它的

2張育銘、修丕承、郭大維,「未來行動裝置與其軟體系統」,NCP Newsletter,第 19 期,民國 99 年 9 月,

第 4-5 頁

畫面是顯示在手機螢幕之外,更重要地是它使用 AndroidManifest.xml 定義該 activity,並以程式開發使用 Java 程式語言,有別於傳統 HTML 等網頁相關的程式 碼。

每個應用程式都會有一個起始的 activity,為啟動應用程式時的主要頁面,每 個 activity 都可以呼叫另一個 activity,當子 activity 啟動後,父 activity 便會停止 執行,直到子使用者按下後退鍵而關閉後(onPause, onStop, onDestroy),父 activity 才會重新執行(onResume)。Android 是以後進先出堆疊的方式實做 activity 間的 關係,也就是說子 activity 是堆疊在父 activity 之上。

Activity 在狀態方面有三種情形,分別為 Resumed、Paused 與 Stopped:

(1)Resumed:使用者正使用中的畫面,也可以稱為 Running。

(2)Paused:會被另一個使用中的 activity 蓋過去,此時這 activity 還是作用中,但 當系統記憶體不足時有可能會被刪除。

(3)Stopped:未顯示在螢幕上,狀態處於作用中,隨時可能被系統刪除。

2.Service:Android 中的服務(Service),它與 Activity 不同,它是不能與使用者互相互動 的,不能獨立自行啟動的,是在背景運行的程序,若使用者使用後退鍵或首頁鍵退 出應用程式時,Service 並不會結束,它仍然在背景運行,舉例來說,手機播放音 樂就屬於 Service,使用者常喜歡邊操作手機邊聽音樂,當我們退出播放音樂的應 用程式而不使用 Service,那麼使用者就無法聽歌,為解決這類問題則需要靠 Service 處理。

Service 通常需要透過使用 Context.startService()或 Context.bindService()方法啓

動服務。這兩種方式都可以啓動 Service,但使用的場合有所不同。使用 startService() 方法啓用服務,Activity 與服務之間沒有關連,即使 Activity 退出服務仍會在背景 運行。使用 bindService()方法啓用服務時,Activity 與服務會 bind 在一起,服務隨 著 Activity 關閉而停止。若採用 Context.startService()方法啓動服務,在服務未被建 立時,系統會先呼叫服務的 onCreate()方法,再呼叫 onStart()方法。如果在呼叫 startService()方法前,服務就已經被建立,多次呼叫 startService()方法並不會重複 建立服務,但會導致 onStart()方法的多次呼叫。採用 startService()方法啓動的服務,

只能透過 Context.stopService()方法來停止服務,並會呼叫 onDestroy()方法。

若採用 Context.bindService()方法啓動服務,在服務未被建立之前,系統會先 呼叫服務的 onCreate()方法,再使用 onBind()方法。這個時候 Activity 和服務 bind 在一起,若 Activity 關閉時,系統會先呼叫服務的 onUnbind()方法,再呼叫 onDestroy()方法。如果使用 bindService()方法前服務已經被 bind,多次使用

bindService()方法不會導致服務多次建立及綁定。若需要解除綁定關係,可以使用 unbindService()方法,也會造成系統呼叫服務的 onUnbind()方法後,再呼叫

onDestroy()方法。

3.Intent:在 Android 應用程式中,Activity 和 Activity 之間或 Service 的切換是透過 Intent 的傳遞,應用程式之間傳輸資料也是透過 Intent。Intent 主要屬性包含: Component Name、Action、Data、Category、Extras 和 Flags。

Intent 的扮演的角色類似事件(event),但與傳統的事件處理仍有差異。傳統的 事件處理,當一事件觸發時,便呼叫讓事件的處理者(handler),或直接將該事件 交付給應用程式,由應用程式決定處理方式。

Intent 包含述了 Activity 想要做甚麼事、想處理什麼類型資料的資訊,Android

(1)自行定義一個 Intent、並於 Service 設定可接收此 Intent,使用 Activity 送出 Intent 的方式,讓該應用程式啟動 Service,也可透過此 Intent 也可以用來傳遞資料,

其中一個傳遞資料的方法是透過 putExtra 方法,putExtra 有多重定義,程式中 我

們 使

用的是下面這個定義:

name 代表鍵值,而後面的參數表示要傳遞的值,如果要接收資料,需利 用 Activity 類別提供的 getIntent 方法取得 Intent,只要利同樣的名稱,便可將 資料取出來,不同的資料型別有不同的方法。

(2)使用 Android 函式庫定義的動作「ACTION_VIEW」,使用此種方式通常會建立 IntentFilter 物件,告知 Android 系統自己能夠回應或處理哪些 Intent,當判斷接 收的 Intent 資料屬性中 URL 資料與內部定義的 ACTION_VIEW 相同時,便執 行該方法的處理。

4.BroadcastReceiver:在 Android 中,廣播(Broadcast)是常用在應用程序之間傳輸信息的 一種機制。Android 系統本身會發出廣播,例如時區改變時、電池剩餘電量過低時、

使用者的語言偏好設定改變時都會發出廣播,廣播接收器(Broadcast Receiver)用來 接收發送出來的廣播,進行過濾後執行對應動作,跟應用程式 Service 一樣並不具

public Intent putExtra (String name, int value)

訊息(如 Action、Category 等資訊)寫入 Intent,透過使用 sendOrderBroadcast()、

Context.sendBroadcast()或 sendStickyBroadcast()等方法,將 Intent 物件以廣播方式 發送出去。

當 Intent 被發送之後,已註冊的廣播接收器會檢查發送的 Intent 是否與註冊 時的 IntentFilter 相符合,如果符合則就會呼叫廣播接收器的 onReceive()方法。所 以當我們定義一個廣播接收器的時候,都需要定義 onReceive()方法要執行的動作。

註冊 BroadcastReceiver 的方式有兩種,如下:

(1)靜態的方式:在 AndroidManifest.xml 中使用<receiver>標籤註冊廣播接收器名 稱,並在標籤內增加過濾器標籤<intent- filter>,用來過濾是否是指定的廣播名 稱。

(2)動態的方式:先定義並設置 IntentFilter 物件,使用 Context.registerReceiver()方法 註冊,當取消時就使用 Context.unregisterReceiver()方法。以動態方式註冊的 BroadcastReceiver 的 Intent 被銷毀時,BroadcastReceiver 也會跟著取消註冊。

5.Content Provider:Android API 提供的 content provider 組件,它用來提供應用程式之 間可以資料共享的功能,Android 系統本身已提供數個 content providers,包括音訊、

通訊錄等資料。content provider 是一套資料存儲和獲取的介面,所以可以透過不同 的方式呈現資料,其中最常見的是使用 SQLite 的方式,content provider 可視為資 料表,需要透過類似 KEY 的唯一值 URI(統一資源識別項),對資料進行新增、刪

私擔憂,尤其是他們不願意被記錄的資訊。在 Clayton Shepard 等人[1]曾舉辦過臨床實 驗,發現受測者最關心的是關於他們的身分辯證資訊。也就是說,參與者並不希望,研

除了使用者所在位置資訊之外,N. Haderer 等人[3]考量受測者不希望洩漏如:電話號 碼,簡訊或通訊錄之類資訊,提供使用者由定義所有的隱私管理模組,如果不希望這些 敏感資訊共享,可讓使用者選取後並以雜湊(hash)演算法來對這些資訊加密,因此,紀 錄於伺服器資料庫的資料實驗分析者便無法辨識這些隱私資訊。

相關文件