Activity :
活動是最基本的 Android 應用程式組件,應用程式中,一個活動通常就是一個單獨的螢幕。每一個活動
都被實現為一個獨立的類,並且從活動基類中繼承而來,活動類將會顯示由視圖控制群組成的使用者介面,並對
事件做出響應。大多數的應用是由多個螢幕顯示組成。例如:一個文本資訊的應用也許有一個顯示發送訊息的
連絡人清單螢幕,第二個螢幕用來寫簡訊和選擇收件者,再來一個螢幕查看訊息曆史或者訊息設定作業
等。這裡每一個這樣的螢幕就是一個活動,很容易實現從一個螢幕到一個新的螢幕並且完成新的活動。在某
些情況下當前的螢幕也許需要向上一個螢幕活動提供傳回值--比如讓使用者從手機中挑選一張照片返回通訊錄
做為電話撥入者的頭像。當一個新的螢幕開啟後,前一個螢幕將會暫停,並儲存在曆史堆棧中。使用者可以返回到曆史堆棧中的前
一個螢幕。當螢幕不再使用時,還可以從曆史堆棧中刪除。預設情況下,Android 將會保留從主畫面到每一
個應用的運行螢幕。簡單理解 Activity 代表一個使用者所能看到的螢幕,Activity 主要是處理一個應用的整體性工作,例如,監
聽系統事件(按鍵事件、觸控螢幕事件等)、為使用者顯示指定的 View,啟動其他 Activity 等。所有應用的 Activity
都繼承於 android.app.Activity 類,該類是 Android 提供的基層類,其他的 Activity 繼承該父類後,
通過 Override父類的方法來實現各種功能,這種設計在其他領域也較為常見
Intent :
調用 Android 專有類 Intent 進行架構螢幕之間的切換。Intent 是描述應用想要做什麼。Intent 資料結構兩
個最重要的部分是動作和動作對應的資料。典型的動作類型有:MAIN(活動的門戶)、VIEW、PICK、EDIT等。而動作對應的資料則以 URI 的形式進行表示。例如:要查看某個人的連絡方式,你需要建立一個動作類
型為 VIEW 的 Intent,以及一個表示這個人的 URI。Android 使用了 Intent 這個特殊類,實現在螢幕與螢幕之間移動。Intent 類用於描述一個應用將會做什麼
事。Intent 的描述結構中, 有兩個最重要的部分:動作和動作對應的資料。
典型的動作類型有: AINM(activity的 門 戶)、VIEW、PICK、EDIT 等。而動作對應的資料則以 URI 的形式進行表示。例如:要查看一個人的聯
系方式,你需要建立一個動作類型為 VIEW 的 intent,以及一個表示這個人的 URI。
與之有關係的一個類叫 IntentFilter。相對於 intent 是一個有效做某事的請求,一個 intentfilter 則用於描
述一個 activity(或者 IntentReceiver)能夠操作哪些 intent。一個 activity 如果要顯示一個人的連絡方式時,需
要聲明一個 IntentFilter,這個 IntentFilter 要知道怎麼去處理 VIEW 動作和表示一個人的 URI。IntentFilter 需
要在 AndroidManifest.xml 中定義。
通過解析各種 intent,從一個螢幕導航到另一個螢幕是很簡單的。當向前置航時,activity 將會調用
startActivity(IntentmyIntent)方法。然後,系統會在所有安裝的應用程式中定義的 IntentFilter 中尋找,找到最
匹配 myIntent 的 Intent 對應的 activity。新的 activity 接收到 myIntent 的通知後,開始運行。當 startActivity 方
法被調用將觸發解析 myIntent 的動作,這個機制提供了兩個關鍵好處:
A、Activities 能夠重複利用從其它組件中以 Intent 的形式產生的一個請求;
B、Activities 可以在任何時候被一個具有相同 IntentFilter 的新的 Activity 取代。
IntentReceiver:
當你希望你的應用能夠對一個外部的事件(如當電話呼入時,或者資料網路可用時,或者到了晚上時)做出響
應,你可以使用一個 IntentReceiver。雖然 IntentReceiver 在感興趣的事件發生時,會使用 NotificationManager
通知使用者,但它並不能產生一個 UI。IntentReceiver 在 AndroidManifest.xml 中註冊,但也可以在代碼中使用
Context.registerReceiver()進行註冊。當一個 intentreceiver 被觸發時,你的應用不必對請求調用 intentreceiver,
系統會在需要的時候啟動你的應用。各種應用還可以通過使用 Context.broadcastIntent() 將它們自己的
intentreceiver 廣播給其它應用程式。
Service :
一個 Service 是一段長生命週期的,沒有使用者介面的程式。比較好的一個例子就是一個正在從播放清單中
播放歌曲的媒體播放器。在一個媒體播放器的應用中,應該會有多個 activity,讓使用者可以選擇歌曲並播放
歌曲。然而,音樂重放這個功能並沒有對應的 activity,因為使用者當然會認為在導航到其它螢幕時音樂應該
還在播放的。在這個例子中,媒體播放器這個 activity 會使用 Context.startService()來啟動一個 service,從而
可以在後台保持音樂的播放。同時,系統也將保持這個 service 一直執行,直到這個 service 運行結束。另外,
我們還可以通過使用 Context.bindService()方法,串連到一個 service 上(如果這個 service 還沒有運行將啟動
它) 當串連到一個 service 之後,我們還可以 service 提供的介面與它進行通訊。拿媒體播放器這個例子來說 ,
我們還可以進行暫停、重播等操作。
Content Provider :
Android 應用程式能夠將它們的資料儲存到檔案、SQLite 資料庫中,甚至是任何有效裝置中。當你想
將你的應用資料與其它的應用共用時,內容提供器就可以發揮作用了。因為內容提供器類實現了一組標準的
方法,從而能夠讓其它的應用儲存或讀取此內容提供器處理的各種資料類型。
資料是應用的核心。在 Android 中,預設使用鼎鼎大名的 SQLite 作為系統 DB。但是在 Android 中,使用方
法有點小小的不一樣。在 Android 中每一個應用都運行在各自的進程中,當你的應用需要訪問其他應用的數
據時,也就需要資料在不同的虛擬機器之間傳遞,這樣的情況操作起來可能有些困難(正常情況下,你不能讀取
其他的應用的 db 檔案),ContentProvider 正是用來解決在不同的應用程式套件之間共用資料的工具。
a,所有被一個 Android 應用程式建立的喜好設定,檔案和資料庫都是私人的。
b,為了和其他應用程式共用資料,應用程式不得不建立一個 Content Provider
c,要回索其他應用程式的資料,它自己的 Content Provider 必須被調用
d,Android 本地 Content Provider 包括:
CallLog:地址和接收到的電話資訊
Contact.People.Phones:儲存電話號碼
Setting.System:系統設定和喜好設定